小小白祈祷中...

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
    4
    HTTP/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:

    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
    3
    curl 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

注意事项

  1. HTTPS 请求中的证书问题

    • 如果遇到 SSL 证书问题,可以暂时使用 -k 跳过验证,但在生产环境中建议解决证书问题以确保安全。
  2. 静默模式

    • 使用 -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
  • 掌握 curl 的使用,可以非常高效地完成各种网络交互任务,尤其是在开发和调试 API 时,curl 是必不可少的工具。