curl 能做什么
curl 是命令行 HTTP 客户端,也是接口调试与冒烟检查的基本工具:-i 输出响应头、-d/-H 构造请求、-w 自定义耗时指标、-f 让服务端错误变成命令失败、-sS 静默但保留错误信息。几乎所有 Linux/macOS/Windows 环境自带或一条命令可装,是 CI 冒烟脚本里依赖最轻的选择。
基本信息
| 适用平台 | Linux/macOS/Windows,curl 7.x/8.x 通用 |
|---|---|
| 常用参数 | -i 含响应头、-d 请求体、-H 请求头、-w 输出模板、-f 错误即失败 |
| 退出码 | 0 成功;配合 -f 时 HTTP 4xx/5xx 返回 22 |
| 超时控制 | --connect-timeout 连接超时,--max-time 整体超时 |
典型使用场景
- 排查鉴权:看 401/403 的响应头与错误体,确认令牌与作用域
- 排查限流:429 时读 Retry-After 头,确定重试等待时间
- 冒烟检查:健康检查端点配合 -f 直接作为脚本判据
- 复现线上问题:把现象翻译成可重放的 curl 命令
- 耗时分解:用 -w 的 time_* 变量拆分 DNS、连接与首字节耗时
常用命令
常用命令
curl -sS -i https://api.example.com/v1/users/1 # 响应头 + 响应体
curl -sS -X POST https://api.example.com/v1/users \
-H "Content-Type: application/json" \
-d '{"name":"alice"}' # 构造 JSON 请求体
curl -sS -f -o /dev/null -w "code=%{http_code} time=%{time_total}\n" \
https://api.example.com/healthz # 只输出状态码与总耗时
echo $? # 退出码:0 成功,-f 下 4xx/5xx 为 22-w 变量逐列读法
| 变量 | 含义 | 偏大说明 |
|---|---|---|
| time_namelookup | DNS 解析完成时刻 | DNS 慢或解析链路异常 |
| time_connect | TCP 连接完成时刻 | 网络路径或握手有问题 |
| time_appconnect | TLS 握手完成时刻 | HTTPS 协商开销大 |
| time_starttransfer | 首字节到达时刻(TTFB) | 服务端处理慢 |
| time_total | 整个请求总耗时 | 与 TTFB 差值大说明传输慢 |
| http_code | 响应状态码 | 4xx/5xx 需对照错误体 |
time_* 变量是「从开始到该阶段完成」的累计时刻(秒),不是各阶段独立耗时;相邻两项相减才是阶段时长。
curl 7.76 起提供 --fail-with-body:4xx/5xx 时命令失败且保留响应体,比裸 -f 更适合脚本排错。
网络抖动场景可用 --retry 3 --retry-delay 1 自动重试瞬态错误(连接超时、连接重置等);要让 HTTP 错误码也触发重试需 --retry-all-errors(curl 7.71 起),写操作重试前先确认接口幂等。
需要看请求全过程时加 -v 查看请求头、连接与 TLS 协商细节;-v 输出包含 Authorization 头,粘贴到工单或群里前先脱敏。