curl 的使用详解

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

常用组合示例

  1. 发起带有 JSON 的 POST 请求,并设置头信息

    curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer token" -d '{"name":"John"}' http://example.com/api
    
  2. 下载文件并显示进度条

    curl -O -# http://example.com/file.zip
    
  3. 携带 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

如果你需要通过 OAuthBearer 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

结合正则表达式或其他命令行工具如 grepawk,你可以实现简单的网页抓取任务。

24. 检查网站 SSL 证书信息

curl 可以用于检查 SSL 证书的详细信息,这对于调试 HTTPS 或排查证书问题非常有用:

curl -vI https://example.com

它会展示关于 SSL 证书的详细信息,帮助你检查证书是否过期、是否正确配置等。

25. 模拟 HTTP 重定向

使用 -L 来模拟重定向的效果,并检查重定向链路:

curl -L http://example.com

这样,curl 会自动跟随 HTTP 重定向,直到到达最终的目标页面。

26. 发送压缩请求

curl 支持通过 gzipdeflate 压缩请求,减少带宽使用。你可以指定 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值