curl 命令

228 阅读2分钟

curl 是一个强大的命令行工具,用于获取或发送数据,无需用户图形界面交互。它最初由 Daniel Stenberg 在 1997 年创建,主要设计用于通过 URL 语法在命令行下工作,支持多种数据协议,如 FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP 和 RTSP。

基本语法

curl [options] [URL...]

主要选项

  • -X, --request <command>: 指定请求类型(如 GET、POST、PUT、DELETE 等)。
  • -d, --data <data>: 发送 POST 数据。
  • -F, --form <name>=<value>: 发送 multipart/form-data 格式的 POST 数据,适合上传文件。
  • -H, --header <string>: 自定义 HTTP 请求头。
  • -O, --remote-name: 下载文件时使用远程文件名。
  • -o, --output <file>: 将输出写入指定文件,而不是标准输出。
  • -L, --location: 跟随 HTTP 重定向。
  • -v, --verbose: 显示详细的传输信息。
  • -V, --version: 显示 curl 版本信息。
  • -u, --user <user:password>: 使用基本或摘要认证。
  • -i, --include: 包括 HTTP 头部信息在输出中。
  • -J, --remote-header-name: 使用从服务器返回的 Content-Disposition 字段中的建议文件名。
  • -k, --insecure: 允许连接到不受信任的 HTTPS 服务器。
  • -s, --silent: 静默模式,不显示进度条。
  • -S, --show-error: 当发生错误时显示错误信息。
  • -A, --user-agent <agent>: 设置用户代理字符串。
  • -x, --proxy <host:port>: 使用 HTTP 代理。
  • -#: 显示下载速度。
  • -C, --continue-at <offset>: 断点续传。
  • -r, --range <range>: 请求部分数据。
  • --connect-timeout <seconds>: 设置连接超时时间。
  • --max-time <seconds>: 设置最大传输时间。
  • --retry <num>: 在遇到网络问题时重新尝试。
  • --retry-delay <seconds>: 设置每次重试之间的延迟。

使用示例

  • 获取网页内容:

    curl http://example.com
    
  • 发送 POST 请求:

    curl -X POST -d "param1=value1&param2=value2" http://example.com
    
  • 下载文件并保存:

    curl -o filename.html http://example.com/filename.html
    
  • 跟随重定向:

    curl -L http://example.com
    
  • 使用证书访问 HTTPS 站点:

    curl --cacert /path/to/cacert.pem https://example.com
    
  • 使用 HTTP Basic 认证:

    curl -u username:password http://example.com
    
  • 发送 multipart/form-data 数据(适合上传文件):

    curl -F "upload=@localfilename" http://example.com/upload
    

注意事项

  • 在使用 curl 时,确保遵守目标服务器的访问规则和政策。
  • 对于敏感操作,如认证信息,使用 -d-F 参数时,应谨慎处理,避免泄露敏感信息。
  • 当处理大文件或长时间运行的任务时,使用适当的错误处理和重试机制。
  • 在脚本中使用 curl 时,考虑网络不稳定的情况,增加健壮性。

curl 是 Linux 和 Unix 系统中的标准工具,也是 Windows 上的一个流行工具。它广泛用于自动化任务、脚本编写、测试 web 服务和下载文件。