curl
是 Linux 和类 Unix 系统中一个非常强大的命令行工具,用于发起 HTTP、HTTPS、FTP 等多种协议的请求。它的全名是 Client URL,主要用于从命令行与服务器交互,支持下载文件、上传数据、测试 API、发送 POST/GET 请求等功能。
以下是 curl
命令的详细介绍,包括基本用法、常用选项和丰富的示例。
基本语法
1 | curl [选项] [URL] |
- URL:目标地址,支持多种协议,如 HTTP、HTTPS、FTP 等。
- 选项:用于控制请求的行为,例如头信息、数据传递、文件保存等。
常用选项
选项 | 功能 |
---|---|
-X 或 --request |
指定 HTTP 方法(如 GET、POST、PUT、DELETE 等)。 |
-d 或 --data |
发送数据(通常用于 POST 请求)。 |
-H 或 --header |
添加自定义请求头。 |
-o |
将输出保存到指定文件中。 |
-O |
使用 URL 的文件名保存文件。 |
-L |
跟随重定向。 |
-I 或 --head |
仅显示响应头信息。 |
-k |
跳过 SSL 证书验证(适用于 HTTPS)。 |
-u |
指定用户名和密码(如 username:password )。 |
-s |
静默模式(不显示进度条或错误信息)。 |
-v |
显示详细的请求和响应信息。 |
-w |
自定义输出格式。 |
--limit-rate |
限制传输速度(如 --limit-rate 100K 表示每秒最大 100 KB)。 |
--cookie |
发送指定的 Cookie(如 --cookie "name=value" )。 |
--cookie-jar |
保存服务器返回的 Cookie 到文件。 |
-F 或 --form |
模拟表单提交(用于上传文件或多部分表单数据)。 |
--compressed |
请求压缩数据,并自动解压响应(如 gzip)。 |
常用功能和示例
发送 GET 请求
- 命令:
1
curl https://example.com
- 用途:
- 发送一个 GET 请求并输出响应的内容。
保存响应到文件
-
使用
-o
指定保存的文件名:1
curl -o output.html https://example.com
- 保存为
output.html
。
- 保存为
-
使用
-O
直接使用 URL 的文件名:1
curl -O https://example.com/file.zip
- 保存为
file.zip
。
- 保存为
发送 POST 请求
-
发送带数据的 POST 请求:
1
curl -X POST -d "key1=value1&key2=value2" https://example.com/api
- 使用
-d
传递 POST 数据。
- 使用
-
使用 JSON 数据:
1
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' https://example.com/api
添加自定义请求头
- 使用
-H
添加请求头:1
curl -H "Authorization: Bearer <token>" https://example.com/api
跟随重定向
- 默认情况下,
curl
不会跟随重定向。使用-L
可以实现:1
curl -L https://example.com
仅显示响应头
- 使用
-I
或--head
:输出示例:1
curl -I https://example.com
1
2
3
4HTTP/1.1 200 OK
Date: Mon, 09 Dec 2024 10:00:00 GMT
Content-Type: text/html
Content-Length: 1234
忽略 SSL 证书验证
- 如果目标网站使用了无效的 SSL 证书,可以使用
-k
跳过验证:1
curl -k https://example.com
发送带认证信息的请求
- 使用
-u
传递用户名和密码:1
curl -u username:password https://example.com
模拟浏览器访问
- 添加常见的浏览器 User-Agent:
1
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com
下载文件并限制速度
- 限制下载速度为 100 KB/s:
1
curl --limit-rate 100K -O https://example.com/file.zip
发送 Cookie
-
发送指定的 Cookie:
1
curl --cookie "name=value" https://example.com
-
保存服务器返回的 Cookie:
1
curl --cookie-jar cookies.txt https://example.com
上传文件
- 使用表单上传文件:
1
curl -F "file=@/path/to/file" https://example.com/upload
压缩请求和解压响应
- 请求启用压缩并自动解压:
1
curl --compressed https://example.com
显示详细的请求和响应信息
- 使用
-v
查看请求和响应的完整细节:输出示例:1
curl -v https://example.com
1
2
3
4
5
6
7
8> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.68.0
> Accept: */*
...
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 1234
测试 API
- 使用
curl
测试 REST API:1
curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"1234"}' https://example.com/api/login
自定义输出格式
- 使用
-w
自定义输出格式:输出示例:1
curl -w "HTTP Code: %{http_code}\n" -o /dev/null -s https://example.com
1
HTTP Code: 200
并发请求(结合 xargs
)
- 对多个 URL 并发请求:
1
echo "https://example.com/1 https://example.com/2" | xargs -n 1 -P 2 curl -O
-n 1
:每次处理一个 URL。-P 2
:同时发起 2 个请求。
查看 curl
版本和支持的协议
- 查看
curl
版本和支持的协议:输出示例:1
curl --version
1
2
3curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0
Release-Date: 2020-01-08
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
结合 curl
的高级使用
下载多个文件
- 使用多个 URL 下载:
1
curl -O https://example.com/file1 -O https://example.com/file2
模拟多段下载(断点续传)
- 从指定偏移量继续下载文件:
1
curl -C - -O https://example.com/largefile.zip
执行复杂的 API 请求
-
发送 PUT 请求:
1
curl -X PUT -H "Content-Type: application/json" -d '{"key":"value"}' https://example.com/api/resource
-
发送 DELETE 请求:
1
curl -X DELETE https://example.com/api/resource/123
注意事项
-
HTTPS 请求中的证书问题:
- 如果遇到 SSL 证书问题,可以暂时使用
-k
跳过验证,但在生产环境中建议解决证书问题以确保安全。
- 如果遇到 SSL 证书问题,可以暂时使用
-
静默模式:
- 使用
-s
可以隐藏进度条和错误信息,但建议结合-o
或-w
进行更好的控制。
- 使用
总结
curl
是一个功能强大的命令行工具,适用于数据传输、API 测试、文件下载等多种场景。- 常用选项组合:
- 简单 GET 请求:
curl https://example.com
- POST 请求:
curl -X POST -d "key=value" https://example.com/api
- 文件下载:
curl -O https://example.com/file.zip
- 跟随重定向:
curl -L https://example.com
- 简单 GET 请求:
- 掌握
curl
的使用,可以非常高效地完成各种网络交互任务,尤其是在开发和调试 API 时,curl
是必不可少的工具。