cURL 是一款强大的命令行工具,它使用 URL 语法来获取或发送数据。
对于开发人员或技术支持人员来说,熟练掌握 cURL 命令的使用方法,对于 Web 应用程序的故障排除至关重要。cURL 具有跨平台特性,这意味着你可以在 Windows、macOS 和 UNIX 等多种操作系统上使用它。
以下是一些最常用的 cURL 语法及其示例,希望能帮助你更好地理解和运用。
验证 URL 连接性
在 UNIX 系统上,当你尝试连接外部 URL 时,第一步通常是检查是否可以使用 cURL 成功访问该 URL。
基本的 cURL 连接测试命令如下:
curl yoururl.com
正常情况下,这个命令不会产生任何输出。然而,如果服务器无法连接,你将会看到类似“无法解析主机”的错误信息。
例如:
curl: (6) Could not resolve host: helloitdoesntexist.com; Unknown error
将 URL/URI 输出保存到文件
如果你需要将 URL 或 URI 的内容保存到指定的文件,可以使用重定向操作符 >
。 命令格式如下:
curl https://yoururl.com > yoururl.html
例如:
curl https://gf.dev > /tmp/gfhtml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 18557 0 18557 0 0 72565 0 --:--:-- --:--:-- --:--:-- 72772
以上命令会将 gf.dev
网页的所有内容保存到 /tmp/gf.html
文件中。
显示请求和响应头
当你遇到问题需要进行验证时,查看实际发送的请求头和接收到的响应头是非常有帮助的。 你可以使用 -v
选项来显示这些详细信息:
curl -v yoururl.com
例如:
curl -v https://techblik.com.com
* About to connect() to techblik.com.com port 443 (#0)
* Trying 104.25.134.107...
* Connected to techblik.com.com (104.25.134.107) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=ssl371609.cloudflaressl.com,OU=PositiveSSL Multi-Domain,OU=Domain Control Validated
* start date: Nov 07 00:00:00 2019 GMT
* expire date: May 15 23:59:59 2020 GMT
* common name: ssl371609.cloudflaressl.com
* issuer: CN=COMODO ECC Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: techblik.com.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 09 Nov 2019 19:41:37 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=d2ce6cd359ebc0b6eb5ff3a454ed042021573328497; expires=Sun, 08-Nov-20 19:41:37 GMT; path=/; domain=.techblik.com.com; HttpOnly; Secure
< Vary: Accept-Encoding
< Link: <https://techblik.com.com/wp-json/>; rel="https://api.w.org/"
< Link: <https://techblik.com.com/>; rel=shortlink
< X-SRCache-Fetch-Status: HIT
< X-SRCache-Store-Status: BYPASS
< X-Frame-Options: SAMEORIGIN
< X-Powered-By: EasyEngine v4.0.12
< Via: 1.1 google
< CF-Cache-Status: DYNAMIC
< Strict-Transport-Security: max-age=15552000; preload
< X-Content-Type-Options: nosniff
< Alt-Svc: h3-23=":443"; ma=86400
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 533243e4bcd4bbf4-LHR
<
限速下载
在进行优化或需要模拟特定网络速度下载的情况下,可以使用 --limit-rate
参数来限制下载速度。例如,限制下载速度为 2000B/秒:
curl --limit-rate 2000B https://gf.dev
使用代理连接
当你在一个需要通过代理服务器连接外部网络的 DMZ 环境中工作时,这个功能会非常有用。 使用 --proxy
参数指定代理服务器的地址和端口:
curl --proxy yourproxy:port https://yoururl.com
你可以通过在请求中添加头部信息来测试或解决一些特定的问题。 以下是一个使用 Content-Type
头信息的例子:
curl --header 'Content-Type: application/json' http://yoururl.com
上面的命令会指示 cURL 在请求头中将 Content-Type 设置为 application/json
。
如果你只是想快速检查响应头,可以使用 --head
参数:
curl --head http://yoururl.com
例如:
curl --head https://chandan.io
HTTP/1.1 200 OK
Date: Sat, 09 Nov 2019 19:51:23 GMT
Content-Type: text/html
Connection: keep-alive
Set-Cookie: __cfduid=d3cb2c7b8e566ad99c870b0af12b0f1eb1573329083; expires=Sun, 08-Nov-20 19:51:23 GMT; path=/; domain=.chandan.io; HttpOnly
X-GUploader-UploadID: AEnB2Uo96JhvJmR2zYUL-Ndh2ta3UD_ykQAB5C7O8cjZQhCf-GxHQ0MsodSzRnl3guSN3ywAYNjtWcPXfwDXjLg3bQ-P5vQMOA
Expires: Sat, 09 Nov 2019 20:51:23 GMT
Cache-Control: public, max-age=3600
Last-Modified: Mon, 06 Aug 2018 10:45:47 GMT
x-goog-generation: 1533552347482034
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 24620
x-goog-hash: crc32c=DpDPAQ==
x-goog-hash: md5=cIP/3rusdUx12Zla1kf1yA==
x-goog-storage-class: MULTI_REGIONAL
Accept-Ranges: bytes
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 53325234dc2fbb9a-LHR
连接 HTTPS/SSL URL 并忽略 SSL 证书错误
当你尝试访问一个 SSL/TLS 加密的 URL,如果该 URL 的证书无效或域名不匹配,你可能会收到一个错误提示,如:
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
好消息是,你可以使用 --insecure
标志来指示 cURL 忽略证书错误:
curl --insecure https://yoururl.com
使用特定协议 (SSL/TLS) 连接
如果你需要测试一个 URL 是否可以通过特定的 SSL/TLS 协议进行握手,这个功能会非常实用。使用 --sslv3
参数强制使用 SSL v3 协议:
curl --sslv3 https://yoururl.com
对于不同的 TLS 版本,你可以使用相应的参数,例如:
curl --tlsv1 https://example.com
curl --tlsv1.0 https://example.com
curl --tlsv1.1 https://example.com
curl --tlsv1.2 https://example.com
curl --tlsv1.3 https://example.com
从 FTP 服务器下载文件
你可以使用 cURL 从 FTP 服务器下载文件,并指定用户名和密码:
curl -u user:password -O ftp://ftpurl/style.css
你可以随时在任何命令中添加 -v
参数来启用详细模式,以便查看更全面的输出信息。
当你需要通过 IP 地址测试目标 URL 或使用负载均衡器 IP/URL 测试应用程序时,可以利用 Host 头部信息。 这时可以使用:
curl --header 'Host: targetapplication.com' https://192.0.0.1:8080/
在线使用 cURL 怎么样?
是的,你可以使用一些在线工具来实现远程执行 cURL。以下是一些可用的在线 cURL 工具:
Online CURL – 一个轻量级的在线工具,支持添加多种 cURL 选项,例如:
--connect-timeout
--cookie
--data
--header
--head
--location
--max-time
--proxy
--request
--user
--url
--user-agent
cURL 命令行生成器 —— 这是一个方便的工具,可以帮助你构建 cURL 命令。你可以在一个友好的图形界面中输入信息,并在底部获得相应的 cURL 命令。
cURL 是一款用于解决实时连接问题的强大工具,希望以上内容能对你有所帮助。如果你想深入学习,我推荐 Linux 命令行基础 在线课程。