curl 调试输出是什么
curl -v 会把一次请求的全过程打出来:解析到哪个地址、TCP 连接是否建立、TLS 握手用了什么协议与密码套件、发出了哪些请求头、收到哪些响应头。--trace 与 --trace-time 提供更细的跟踪,能看到每个字节块的收发。它回答的核心问题是「卡在哪一步」,比只看报错信息精确得多。
基本信息
| 适用平台 | Linux/Unix/Windows 通用(curl 7 及以上) |
|---|---|
| 命令语法 | curl -v URL / curl --trace-time --trace 文件或- URL |
| 常用选项 | -v 详细过程 --trace - 跟踪到标准输出 --trace-time 跟踪带时间戳 -w 输出自定义耗时指标 -I 只看响应头 |
| 输出位置 | -v 与 --trace 都写标准错误,管道时必须 2>&1 才能看到 |
| 判读重点 | 先看连接是否建立,再看 TLS,最后看响应状态码与耗时 |
典型使用场景
- 接口超时定位:区分 DNS 慢、连接慢、TLS 慢还是服务端处理慢
- 证书与握手问题:确认协商到的协议版本与证书主题是否符合预期
- 请求头核对:确认 Host、鉴权头、Cookie 是否按预期发出
- 对比两台后端:同一请求打到不同后端,看响应头差异
- 给开发提供证据:把完整交互过程贴进缺陷单
常用示例
常用示例
curl -v https://api.example.com/health 2>&1 | head -40 # 全过程概览
curl -sS -o /dev/null -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' https://example.com
curl --trace-time --trace - http://10.0.0.5:8080/debug 2>&1 | tail -30 # 带时间戳的细致跟踪
curl -v -H 'Host: api.example.com' http://10.0.0.5/health 2>&1 | head -20 # 直连后端并指定 Host-v 输出关键行读法
| 输出行 | 含义 | 怎么看 |
|---|---|---|
| Trying 与 Connected to | 尝试连接的地址与实际连上的地址 | 两者不同说明经历了重定向或负载均衡 |
| SSL connection using | 协商到的 TLS 版本与密码套件 | 版本过旧或套件异常要查服务端配置 |
| Server certificate | 服务端证书的主题与签发者 | 确认证书域名与预期一致 |
| > GET 或 > POST | 实际发出的请求行与请求头 | 核对 Host、鉴权头与内容类型 |
| < HTTP/1.1 200 | 响应状态行与响应头 | 先看状态码再看内容问题 |
| Connection left intact 或 closed | 连接是否被复用 | 连接被提前关闭常与超时或网关配置有关 |
三段耗时的判据很直观:TTFB 高而 connect 低说明服务端处理慢;connect 高说明网络或连接队列有问题;TLS 段高说明握手慢,常见于证书链过长或未开启会话复用。
--trace 会把请求体与响应体的内容一并输出,里面可能有令牌、口令与个人数据。生产排查时优先用 -v(只到头部层面),确需 --trace 就重定向到受控文件并限制行数,排查完及时清理。