10 cURL 命令用法与实时示例

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 命令行基础 在线课程。