curl 是 Linux 下非常常用的命令行工具,用于在终端中进行 网络请求,支持 HTTP、HTTPS、FTP、SMTP 等多种协议。它不仅可以下载文件,还可以发送 POST 请求、带 Header 的请求,甚至支持 API 调试。

下面给你一个完整、详细的 curl 命令使用讲解。


1. curl 基本用法

1.1 下载网页内容

curl http://example.com

  • 默认会将网页内容输出到终端。
  • 常用参数:
    • -o <filename>:将内容保存到文件。
    • -O:保存文件并保持远程文件名。

示例:

curl -o index.html http://example.com
curl -O http://example.com/file.zip


1.2 显示响应头

curl -I http://example.com

  • -I:只请求 HTTP Header,不下载网页内容。

1.3 跟随重定向

curl -L http://example.com

  • -L:跟随 3xx 重定向。
  • 很多网站会将 http 请求重定向到 https,使用 -L 可以自动跟随。

1.4 限制下载速度

curl --limit-rate 100K http://example.com/file.zip

  • --limit-rate:限制下载速度,比如 100K/s。

2. 发送 GET/POST 请求

2.1 GET 请求

curl http://api.example.com/data

  • 默认就是 GET 请求。
  • 可以使用 -G 指定携带 URL 参数:
curl -G "http://api.example.com/data" --data-urlencode "name=张三"

2.2 POST 请求

curl -X POST http://api.example.com/login -d "username=admin&amp;password=123456"

  • -X POST:指定请求方法为 POST。
  • -d:发送 POST 数据。
  • 支持 JSON 数据:
curl -X POST http://api.example.com/login \
     -H "Content-Type: application/json" \
     -d '{"username":"admin","password":"123456"}'


3. 设置请求头

curl -H "User-Agent: MyCrawler/1.0" -H "Accept: application/json" http://example.com

  • -H:添加 HTTP Header。
  • 可以自定义 User-Agent、Accept、Authorization 等。

4. 上传文件

4.1 上传文件到 HTTP 服务器

curl -F "file=@/path/to/file.txt" http://example.com/upload

  • -F:表单上传(multipart/form-data)。
  • @ 表示文件路径。

4.2 上传文件到 FTP 服务器

curl -T /path/to/file.txt ftp://ftp.example.com/ --user username:password

  • -T:上传文件。
  • --user:FTP 用户名和密码。

5. 保存 cookie / 使用 cookie

5.1 保存 cookie

curl -c cookie.txt http://example.com/login

  • -c cookie.txt:保存 cookie 到文件。

5.2 使用 cookie

curl -b cookie.txt http://example.com/dashboard

  • -b cookie.txt:使用保存的 cookie 发起请求。

6. 代理和 SSL

6.1 使用 HTTP 代理

curl -x http://127.0.0.1:8080 http://example.com

  • -x 或 --proxy:设置代理。

6.2 忽略 SSL 证书验证

curl -k https://example.com

  • -k 或 --insecure:忽略 HTTPS 证书验证。

7. 显示更多调试信息

curl -v http://example.com

  • -v:显示详细请求/响应信息,包括 Header、SSL 连接信息等。
  • --trace 或 --trace-ascii 可以打印更详细的调试日志。

8. 结合管道和 Linux 命令使用

  • 下载并解压:
curl -s https://example.com/file.tar.gz | tar -xz

  • 下载并保存:
curl -sL https://example.com/script.sh | bash

  • -s:静默模式,不显示下载进度。
  • -L:跟随重定向。

9. 总结常用选项

参数功能
-o保存到指定文件
-O保存并使用远程文件名
-I只请求 Header
-L跟随重定向
-dPOST 请求发送数据
-X指定请求方法,如 GET/POST/PUT
-H设置请求头
-F表单上传文件
-c保存 cookie
-b使用 cookie
-v显示详细调试信息
-s静默模式
--limit-rate限制下载速度
-k忽略 HTTPS 证书
-x使用代理

curl 命令功能强大,支持 HTTP、HTTPS、FTP、SMTP 等协议,既可以用于 下载文件,也可以用于 API 调试和网络测试。掌握这些常用选项,可以在 Linux 下高效进行网络操作。