curl
是一个非常强大的命令行工具,用于通过各种协议(如 HTTP、HTTPS、FTP 等)传输数据。它广泛应用于测试 API、下载文件、调试网络请求等。
下面是 curl
常用功能的详解及示例:
基本语法
curl [options] [URL]
1. 基本请求
-
发起简单的
GET
请求:curl http://example.com
这会向
http://example.com
发起一个 GET 请求,默认会把响应输出到终端。 -
保存响应到文件:
curl -o output.html http://example.com
这里
-o
用于指定输出文件名。
2. 发送 POST 请求
-
使用
-X POST
明确指定使用POST
方法:curl -X POST http://example.com
-
发送
POST
数据(表单数据或 JSON 数据):curl -X POST -d "name=John&age=30" http://example.com/form
或者发送 JSON 格式的数据:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John", "age":30}' http://example.com/api
3. 设置请求头
你可以使用 -H
选项添加自定义的请求头:
curl -H "Authorization: Bearer token" http://example.com/api
设置多个请求头:
curl -H "Content-Type: application/json" -H "Authorization: Bearer token" http://example.com/api
4. 携带 Cookie
如果需要模拟用户身份或会话,可以传递 Cookie
:
curl -b "sessionid=abcd1234" http://example.com/profile
5. 保存和加载 Cookie
curl
也可以自动保存并加载 Cookie
文件:
-
保存
Cookie
到文件:curl -c cookies.txt http://example.com/login
-
从文件加载
Cookie
并继续请求:curl -b cookies.txt http://example.com/profile
6. 跟随重定向
默认情况下,curl
不会跟随 HTTP 重定向。可以使用 -L
选项跟随重定向:
curl -L http://example.com
7. 显示响应头
使用 -i
可以同时显示响应头和响应体:
curl -i http://example.com
如果你只想查看响应头而不显示响应体,使用 -I
或 --head
选项:
curl -I http://example.com
8. 上传文件
使用 -F
选项上传文件到服务器:
curl -X POST -F "file=@/path/to/file" http://example.com/upload
9. 输出控制
-
将响应内容直接输出到终端:
curl http://example.com
-
使用
-o
或-O
将响应保存为文件:-
-o
用来指定文件名:curl -o myfile.html http://example.com
-
-O
用来保留原文件名:curl -O http://example.com/myfile.html
-
10. 请求超时
设置最大请求时间 curl
:
curl --max-time 10 http://example.com
11. 用户认证
如果需要提供用户名和密码进行认证,可以使用 -u
选项:
curl -u username:password http://example.com/login
支持基本认证和其他 HTTP 认证类型。
12. 代理
通过 curl
发送请求时,可以设置代理服务器:
curl -x http://proxy.example.com:8080 http://example.com
13. 忽略 SSL 证书错误
如果目标服务器的 SSL 证书无效或自签名,可以使用 -k
忽略证书验证:
curl -k https://self-signed.badssl.com/
14. 调试和查看请求过程
使用 -v
(verbose) 查看请求的详细过程:
curl -v http://example.com
如果想查看更多的调试信息,可以使用 --trace
选项:
curl --trace-ascii debug.txt http://example.com
15. 发送 DELETE 请求
类似于 POST,使用 -X DELETE
发送 DELETE 请求:
curl -X DELETE http://example.com/api/resource/123
常用组合示例
-
发起带有 JSON 的 POST 请求,并设置头信息:
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer token" -d '{"name":"John"}' http://example.com/api
-
下载文件并显示进度条:
curl -O -# http://example.com/file.zip
-
携带 Cookie 并跟随重定向:
curl -L -b "sessionid=abcd1234" http://example.com/profile
16 批量下载文件
使用 curl
可以批量下载多个文件,非常适合爬取静态资源或自动化下载任务。比如下载一系列文件:
curl -O http://example.com/file1.zip -O http://example.com/file2.zip
或通过一个循环脚本批量下载:
for i in {1..10}; do curl -O http://example.com/file$i.zip; done
17. 检查服务器响应时间
curl
可以快速查看服务器的响应时间,适合用来做简单的性能测试:
curl -w "@curl-format.txt" -o /dev/null -s http://example.com
你可以自定义 curl-format.txt
来输出详细的时间信息:
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_starttransfer: %{time_starttransfer}\n
-------------------------\n
time_total: %{time_total}\n
18. 与 FTP 或 SFTP 交互
curl
支持 FTP 和 SFTP 协议,可以自动化文件传输任务:
-
下载文件:
curl -u username:password ftp://example.com/path/to/file
-
上传文件:
curl -T localfile -u username:password ftp://example.com/path/to/file
19. 调试 HTTP 请求
curl
提供详细的请求调试信息,可以用来检查 HTTP 请求的具体内容,比如查看请求头和响应头:
curl -v http://example.com
如果想要更深入的调试,可以使用 --trace
选项记录请求的所有细节:
curl --trace trace.txt http://example.com
20. 模拟不同的 User-Agent
有时候你需要伪装成某个特定的客户端(例如浏览器、手机)发送请求。可以使用 -A
指定 User-Agent
:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://example.com
21. 结合 Shell 脚本
将 curl
嵌入到 Shell 脚本中可以实现自动化任务,比如定时监控服务器、批量请求 API、定期下载数据等:
#!/bin/bash
URL="http://example.com/api/data"
RESPONSE=$(curl -s $URL)
if [[ "$RESPONSE" == *"error"* ]]; then
echo "Error detected in API response"
else
echo "API call successful"
fi
22. 模拟带身份认证的下载
当你需要从带有身份认证的网站下载资源时,curl
可以使用用户名和密码进行登录:
curl -u username:password http://example.com/protected/file.zip
如果你需要通过 OAuth
、Bearer Token
等复杂认证方式下载,可以设置相关的头部信息:
curl -H "Authorization: Bearer your_token" -O http://example.com/api/protected/file.zip
23. 网页爬取
你可以使用 curl
来快速爬取网页的内容,用于自动化任务或者数据收集:
curl -L http://example.com -o webpage.html
结合正则表达式或其他命令行工具如 grep
、awk
,你可以实现简单的网页抓取任务。
24. 检查网站 SSL 证书信息
curl
可以用于检查 SSL 证书的详细信息,这对于调试 HTTPS 或排查证书问题非常有用:
curl -vI https://example.com
它会展示关于 SSL 证书的详细信息,帮助你检查证书是否过期、是否正确配置等。
25. 模拟 HTTP 重定向
使用 -L
来模拟重定向的效果,并检查重定向链路:
curl -L http://example.com
这样,curl
会自动跟随 HTTP 重定向,直到到达最终的目标页面。
26. 发送压缩请求
curl
支持通过 gzip
或 deflate
压缩请求,减少带宽使用。你可以指定 Accept-Encoding
来告知服务器接收压缩格式的响应:
curl -H "Accept-Encoding: gzip, deflate" http://example.com
27. 检查站点是否在线
利用 curl
可以轻松监控站点是否在线。可以结合 HTTP 状态码来判断:
curl -o /dev/null -s -w "%{http_code}\n" http://example.com
如果状态码不是 200
,说明站点有问题,可以结合 Shell 脚本做简单的报警机制。
28. 通过代理访问网站
如果你在网络受限的环境中,可以通过代理服务器发送请求:
curl -x socks5://127.0.0.1:1080 http://example.com
或者通过 HTTP 代理:
curl -x http://proxy.example.com:8080 http://example.com