// 安全研究 · 2025-04-27

【保姆级教程】curl 命令选项详解与使用指南

curl 是一款功能强大且用途广泛的命令行工具,用于在各种协议下传输数据。它支持 HTTP、HTTPS、FTP 等多种协议,并提供丰富的选项来处理请求、认证、文件传输等任务。


curl 帮助文件完整翻译

以下是 curl 命令行工具的常用选项及其详细说明,涵盖连接、认证、数据传输、文件操作等功能。

连接与协议相关选项

  • --abstract-unix-socket <path>:通过指定的抽象 Unix 域套接字建立连接。
  • --alt-svc <filename>:启用 HTTP 的 Alt-Svc 功能,并使用指定文件作为缓存。
  • --connect-timeout <seconds>:设置连接的最大等待时间(单位:秒)。
  • --connect-to <HOST1:PORT1:HOST2:PORT2>:将请求从 HOST1:PORT1 重定向到 HOST2:PORT2。
  • --doh-url <URL>:通过指定的 DoH(DNS over HTTPS)服务解析主机名。
  • --happy-eyeballs-timeout-ms <milliseconds>:设置 Happy Eyeballs 算法的超时时间(单位:毫秒)。
  • --http1.1:强制使用 HTTP/1.1 协议。
  • --http2:启用 HTTP/2 协议。
  • --http2-prior-knowledge:直接使用 HTTP/2,不尝试降级到 HTTP/1.x。
  • --http3:启用 HTTP/3 协议。

认证与安全选项

  • --anyauth:自动选择合适的身份验证方法。
  • --basic:使用 HTTP 基本认证(Basic Authentication)。
  • --aws-sigv4 <provider1[:prvdr2[:reg[:srv]]]> :使用 AWS V4 签名认证。
  • --digest:启用 HTTP 摘要认证(Digest Authentication)。
  • --negotiate:使用 GSS-Negotiate 或 SPNEGO 认证(常用于 Kerberos)。
  • --oauth2-bearer <token>:使用 OAuth 2.0 的 Bearer Token 进行认证。
  • --user <user:password>:设置服务器的用户名和密码。

SSL/TLS 相关选项

  • --cacert <file>:指定用于验证对端证书的 CA 证书文件。
  • --cert <certificate[:password]>:指定客户端证书文件及密码。
  • --key <file>:指定私钥文件。
  • --insecure:跳过 SSL/TLS 证书验证(用于测试环境)。
  • --tls13-ciphers <list>:指定 TLS 1.3 的加密算法列表。
  • --tls-max <VERSION>:设置支持的最高 TLS 版本(如 TLSv1.2、TLSv1.3)。

数据发送与表单选项

  • -d, --data <data>:发送 HTTP POST 数据(默认 Content-Type 为 application/x-www-form-urlencoded)。
  • --data-binary <data>:以二进制格式发送 HTTP POST 数据。
  • --data-urlencode <data>:发送 URL 编码后的 HTTP POST 数据。
  • -F, --form <name=content>:以多部分表单(multipart/form-data)格式发送数据。
  • --json <data>:发送 JSON 格式的数据(自动设置 Content-Type 为 application/json)。

文件操作选项

  • -o, --output <file>:将响应写入指定的输出文件。
  • -O, --remote-name:使用远程文件名保存文件。
  • --upload-file <file>:上传指定的本地文件。
  • --create-dirs:自动创建本地所需的目录结构。

请求控制选项

  • -X, --request <method>:指定 HTTP 请求方法(如 GET、POST、PUT、DELETE)。
  • -H, --header <header/@file>:设置自定义请求头,或从文件中读取。
  • -L, --location:自动跟随服务器重定向。
  • --max-time <seconds>:设置整个请求的最大允许时间。
  • --retry <num>:设置传输失败时的最大重试次数。

输出与调试选项

  • -i, --include:在输出中包含 HTTP 响应头。
  • -I, --head:仅获取 HTTP 响应头(HEAD 请求)。
  • -v, --verbose:启用详细输出模式,显示请求和响应的详细信息。
  • --trace <file>:启用调试模式并将详细信息写入指定文件。
  • --write-out <format>:自定义输出格式(如显示状态码、耗时等)。

代理相关选项

  • -x, --proxy [protocol://]host[:port]:通过指定的代理服务器发送请求。
  • --socks5 <host[:port]>:使用 SOCKS5 代理。
  • --proxy-user <user:password>:设置代理的用户名和密码。
  • --proxy-insecure:跳过代理的 SSL/TLS 证书验证。

常用 curl 命令示例

以下是 curl 在实际场景中的应用示例,涵盖基本请求、数据发送、认证、文件操作等功能,帮助您快速掌握其用法。

1. 基本请求

  • 发送 GET 请求

    curl https://example.com

    获取指定 URL 的内容,默认使用 GET 方法。

  • 发送 POST 请求

    curl -X POST https://example.com

    显式指定 POST 方法发送请求。

2. 设置请求头

  • 自定义 User-Agent

    curl -H "User-Agent: MyCustomUserAgent" https://example.com

    模拟特定客户端(如浏览器)的 User-Agent。

  • 发送多个请求头

    curl -H "Authorization: Bearer <token>" -H "Content-Type: application/json" https://example.com

    同时设置认证令牌和内容类型。

3. 发送数据

  • 发送 POST 数据

    curl -X POST -d "key1=value1&key2=value2" https://example.com

    以键值对形式发送数据,默认编码为 application/x-www-form-urlencoded。

  • 发送 JSON 数据

    curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' https://example.com

    发送结构化的 JSON 数据,常用于 API 调用。

  • 上传文件

    curl -F "file=@/path/to/file" https://example.com/upload

    以表单方式上传本地文件。

4. 认证与授权

  • 基本认证

    curl -u username:password https://example.com

    使用用户名和密码进行 HTTP 基本认证。

  • Bearer Token 认证

    curl -H "Authorization: Bearer <token>" https://example.com

    使用 OAuth 2.0 的 Bearer Token 访问受保护资源。

5. 使用代理

  • 通过 HTTP 代理

    curl -x http://proxyserver:port https://example.com

    指定代理服务器转发请求。

  • 通过 SOCKS5 代理

    curl --socks5 proxyserver:port https://example.com

    使用 SOCKS5 协议进行代理。

6. 文件下载与上传

  • 下载文件并保存

    curl -O https://example.com/file.zip

    使用远程文件名保存文件到本地。

  • 下载并重命名

    curl -o myfile.zip https://example.com/file.zip

    指定本地文件名保存文件。

  • 上传文件

    curl -T myfile.zip https://example.com/upload

    将本地文件上传至服务器。

7. 设置超时

  • 连接超时

    curl --connect-timeout 30 https://example.com

    设置连接超时为 30 秒。

  • 总超时

    curl --max-time 60 https://example.com

    设置整个请求的最大时间为 60 秒。

8. 处理重定向

  • 自动跟随重定向

    curl -L https://example.com

    跟随服务器返回的 301/302 重定向。

  • 限制重定向次数

    curl -L --max-redirs 3 https://example.com

    最多跟随 3 次重定向,避免无限循环。

9. 获取响应头

  • 仅获取响应头

    curl -I https://example.com

    发送 HEAD 请求,仅返回头部信息。

  • 显示请求和响应头

    curl -v https://example.com

    输出详细的请求和响应头信息。

10. SSL/TLS 配置

  • 跳过证书验证

    curl -k https://example.com

    忽略 SSL/TLS 证书验证(仅限测试)。

  • 使用证书和密钥

    curl --cert /path/to/cert.pem --key /path/to/key.pem https://example.com

    指定客户端证书和私钥进行双向认证。

11. 调试与日志

  • 启用详细模式

    curl -v https://example.com

    显示请求和响应的详细信息。

  • 输出调试日志

    curl --trace debug.txt https://example.com

    将详细调试信息保存到文件。

12. 其他实用选项

  • 发送带参数的请求

    curl "https://example.com?param1=value1&param2=value2"

    在 URL 中附加查询参数。

  • 使用 HTTP/2

    curl --http2 https://example.com

    强制使用 HTTP/2 协议。

  • 保存和读取 Cookie

    curl -c cookies.txt https://example.com    # 保存 Cookie
    curl -b cookies.txt https://example.com    # 读取 Cookie

    处理会话相关的 Cookie 数据。

原文 https://blog.csdn.net/2301_79518550/article/details/146922566