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¶m2=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 服务和下载文件。