curl 是一个强大的命令行工具,用于从服务器传输数据或向服务器传输数据。它支持多种协议,包括 HTTP、HTTPS、FTP 等,并且广泛应用于调试 API、下载文件以及与 Web 服务交互等场景。本文将详细介绍 curl 的常用参数及其用法。


基础用法

最基本的 curl 命令可以直接用来发送 HTTP 请求。例如:

1
curl https://example.com

上述命令会向 https://example.com 发送一个 GET 请求,并输出返回的内容。

常用参数解析

1. -X 指定请求方法

默认情况下,curl 使用 GET 方法发送请求。如果需要指定其他方法(如 POST、PUT、DELETE 等),可以使用 -X 参数。例如:

1
curl -X POST https://example.com/api

2. -d 发送请求数据

在发送 POST 或 PUT 请求时,通常需要附带数据。-d 参数可以用来指定请求体中的数据。例如:

1
2
3
curl -X POST https://example.com/api \
-d '{"name": "John", "age": 30}' \
-H "Content-Type: application/json"

3. -H 设置请求头

通过 -H 参数可以自定义请求头。例如,设置 Authorization 头以传递认证信息:

1
2
curl https://example.com/api \
-H "Authorization: Bearer YOUR_TOKEN"

4. -o 保存响应内容到文件

如果希望将服务器的响应保存到本地文件中,可以使用 -o 参数。例如:

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

5. -L 自动跳转

当服务器返回重定向响应(如 301 或 302)时,curl 默认不会自动跳转。使用 -L 参数可以让 curl 自动跟随重定向:

1
curl -L https://example.com

6. -I 获取响应头

如果只需要获取响应头信息,而不需要响应体,可以使用 -I 参数:

1
curl -I https://example.com

7. -u 基本认证

对于需要基本认证的资源,可以使用 -u 参数提供用户名和密码:

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

8. --data-urlencode 编码数据

当需要对请求数据进行 URL 编码时,可以使用 --data-urlencode 参数:

1
2
3
curl -X POST https://example.com/api \
--data-urlencode "name=John Doe" \
--data-urlencode "age=30"

9. -v 显示详细信息

使用 -v 参数可以查看请求和响应的详细信息,包括请求头、响应头和状态码:

1
curl -v https://example.com

10. -w 自定义输出信息

-w 参数允许你指定在请求完成后输出的特定信息。你可以在输出中使用占位符(如 %{http_code}%{time_total})来定制输出格式。这个参数非常适用于调试和性能监控。

例如,查看 HTTP 状态码和请求总时间:

1
curl -w "HTTP状态码: %{http_code}\n总耗时: %{time_total}秒\n" https://example.com

该命令将输出类似以下的内容:

1
2
HTTP状态码: 200
总耗时: 0.123秒

常用的占位符包括:

  • %{http_code}: 返回的 HTTP 状态码
  • %{time_total}: 完成请求的总时间(秒)
  • %{time_namelookup}: DNS 查询时间
  • %{time_connect}: 建立连接的时间
  • %{time_starttransfer}: 从发送请求到开始接收到第一个字节的时间

更多占位符的详细列表,可以参考 curl官方文档

高级用法

1. 文件上传

可以通过 -F 参数模拟表单上传文件:

1
2
curl -X POST https://example.com/upload \
-F "file=@/path/to/local/file.txt"

2. 下载多个文件

结合通配符可以一次性下载多个文件:

1
curl -O https://example.com/files/[1-5].jpg

3. 使用代理

如果需要通过代理服务器访问目标地址,可以使用 -x 参数:

1
curl -x http://proxy.example.com:8080 https://example.com

总结

curl 是一个功能强大的工具,适用于各种网络请求场景。通过合理使用其参数,可以轻松完成复杂的任务。无论是调试 API 还是自动化脚本,curl 都是一个不可或缺的利器。

如果你对某些参数的具体用法还有疑问,可以通过 curl --help 查看更多选项说明,或者参考官方文档进一步学习。