Skip to content

curl

curl 是常用的命令行 HTTP 客户端,适合调试接口、下载文件、验证请求头、模拟表单提交和排查网络问题。

查看版本

确认本机是否已安装 curl。

写法:

bash
curl --version

效果/说明:

可以看到 curl 版本、支持的协议和编译特性。

text
curl 8.0.0
Protocols: http https ftp ftps

发送 GET 请求

访问一个 URL 并输出响应内容。

写法:

bash
curl https://api.example.com/users

效果/说明:

默认使用 GET 方法,请求结果会直接输出到终端。

json
[
  {
    "id": 1,
    "name": "Alice"
  }
]

查看响应头

只查看响应头,不输出响应体。

写法:

bash
curl -I https://api.example.com/users

效果/说明:

适合检查状态码、Content-Type、缓存头和重定向信息。

text
HTTP/2 200
content-type: application/json

显示详细请求过程

输出连接、TLS、请求头和响应头等调试信息。

写法:

bash
curl -v https://api.example.com/users

效果/说明:

-v 常用于排查 DNS、证书、代理、重定向和请求头问题。

发送 POST JSON

向接口提交 JSON 请求体。

写法:

bash
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","age":20}'

效果/说明:

  • -X POST:指定请求方法为 POST
  • -H:添加请求头
  • -d:提交请求体
json
{
  "id": 1,
  "name": "Alice",
  "age": 20
}

从文件读取 JSON

请求体较长时,可以把 JSON 放到文件中。

写法:

bash
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d @user.json

user.json 示例:

json
{
  "name": "Alice",
  "age": 20
}

效果/说明:

@user.json 表示从文件读取请求体,适合复杂接口调试。

发送表单请求

提交 application/x-www-form-urlencoded 表单。

写法:

bash
curl -X POST https://api.example.com/login \
  -d "username=alice" \
  -d "password=123456"

效果/说明:

多个 -d 参数会被拼接成表单字段。

text
username=alice&password=123456

上传文件

使用 multipart/form-data 上传文件。

写法:

bash
curl -X POST https://api.example.com/upload \
  -F "file=@./avatar.png" \
  -F "type=avatar"

效果/说明:

  • -F 用于提交 multipart 表单
  • @./avatar.png 表示读取本地文件

下载文件

把远程文件保存到本地。

写法:

bash
curl -O https://example.com/files/app.zip

指定保存文件名:

bash
curl -L https://example.com/download/latest -o app.zip

效果/说明:

  • -O:使用远程文件名保存
  • -o:指定本地文件名
  • -L:跟随重定向

添加请求头

给请求添加自定义 Header。

写法:

bash
curl https://api.example.com/users \
  -H "Accept: application/json" \
  -H "X-Request-Id: demo-001"

效果/说明:

常用于传递内容协商、追踪 ID、租户 ID 等信息。

携带 Token

访问需要认证的接口。

写法:

bash
curl https://api.example.com/profile \
  -H "Authorization: Bearer your-token"

效果/说明:

Bearer Token 常用于 OAuth2、JWT 等认证方式。不要把真实 Token 提交到仓库或粘贴到公开环境。

携带 Cookie 访问接口。

写法:

bash
curl https://example.com/profile \
  -H "Cookie: session_id=abc123"

保存响应中的 Cookie:

bash
curl -c cookies.txt https://example.com/login

读取 Cookie 文件:

bash
curl -b cookies.txt https://example.com/profile

设置超时

避免请求长时间卡住。

写法:

bash
curl https://api.example.com/users \
  --connect-timeout 3 \
  --max-time 10

效果/说明:

  • --connect-timeout:连接超时时间
  • --max-time:整个请求最大耗时

跟随重定向

自动跟随 301、302 等重定向。

写法:

bash
curl -L https://example.com/latest

效果/说明:

下载文件或访问短链接时经常需要 -L

忽略 HTTPS 证书校验

本地测试自签名证书时使用。

写法:

bash
curl -k https://localhost:8443/health

效果/说明:

-k 会跳过证书校验,只建议在本地或测试环境使用,生产环境不要依赖它。

输出状态码

只关心接口是否正常时,可以输出 HTTP 状态码。

写法:

bash
curl -s -o /dev/null -w "%{http_code}\n" https://api.example.com/health

效果/说明:

  • -s:静默模式
  • -o /dev/null:丢弃响应体
  • -w:按模板输出信息
text
200

Windows PowerShell 可写为:

powershell
curl.exe -s -o NUL -w "%{http_code}\n" https://api.example.com/health

使用代理

通过 HTTP 代理发送请求。

写法:

bash
curl -x http://127.0.0.1:7890 https://api.example.com/users

效果/说明:

适合排查代理环境、抓包工具或公司网络访问问题。

常用工作流

下面是一次常见的接口调试流程。

写法:

bash
curl -v https://api.example.com/health
curl -I https://api.example.com/users
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token" \
  -d '{"name":"Alice"}'

效果/说明:

  1. 先检查服务是否可访问
  2. 再查看响应头和状态码
  3. 最后携带请求头和请求体调试业务接口

常用命令速查

命令说明
curl <url>发送 GET 请求
curl -I <url>只查看响应头
curl -v <url>显示详细请求过程
curl -L <url>跟随重定向
curl -O <url>按远程文件名下载
curl -o <file> <url>指定文件名下载
curl -H "Key: Value" <url>添加请求头
curl -d "a=1" <url>发送表单请求
curl -F "file=@a.png" <url>上传文件
curl --connect-timeout 3 <url>设置连接超时
curl --max-time 10 <url>设置请求总超时
curl -k <url>忽略 HTTPS 证书校验
curl -x <proxy> <url>使用代理
二维码手机扫码查看