首页/开发/软件测试速查/curl 接口调试

curl 接口调试

curl 是接口调试的基本工具:-i 看响应头、-d/-H 构造请求、-w 输出耗时指标、-f 让服务端错误码变成命令失败、-sS 静默但保留错误信息;排查 401 与 429 时常用。

软件测试速查开发更新于 2026-10-13

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_namelookupDNS 解析完成时刻DNS 慢或解析链路异常
time_connectTCP 连接完成时刻网络路径或握手有问题
time_appconnectTLS 握手完成时刻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 头,粘贴到工单或群里前先脱敏。

易错点

  • 脚本里不检查退出码(未用 -f 或判断 $?),失败被静默吞掉
  • 命令里直接写真实令牌,随 shell 历史与 CI 日志泄露
  • 只看 http_code 不读错误体,漏掉「200 里包着业务错误码」的情况
  • 对生产环境顺手执行写操作(POST/DELETE)做调试,造成真实数据变更
  • 忽略超时参数:依赖卡死时命令无限等待,拖住整个流水线
  • 对写操作盲目加 --retry,非幂等接口被重复执行,产生重复下单或重复扣款
  • 排错时一味用 -o /dev/null 丢弃响应体,最后只剩状态码,错误详情无从查看

数据来源与参考

  • curl 官方手册(curl.se/docs/manpage.html)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌