curl -v 是什么
curl -v 把一次请求的全过程摊开打印:先解析出的地址、发起的每一次连接尝试、加密握手协商出的协议与套件、实际发出的请求行与请求头、以及收到的响应状态行与响应头。排查应用层连通性时,它同时兼具『测试』和『取证』两个作用:既告诉你通不通,也告诉你卡在哪一步。加 -vv 会补充更多细节,用 --trace-ascii 还能把收发字节完整记下来。
基本信息
| 适用平台 | Linux、macOS 自带,Windows 10 及以上内置 curl.exe |
|---|---|
| 核心组合 | curl -sv -o /dev/null --connect-timeout 5 URL,丢弃正文只看过程 |
| 常用参数 | -v 详细、-vv 更详细、-s 静默进度条、-S 保留错误、-I 只看响应头、-x 走代理 |
| 符号约定 | 以星号开头的是本地连接与协议信息,大于号是发出的请求,小于号是收到的响应 |
| 排查提示 | 先加 --connect-timeout 限定等待,避免连不通时长时间挂住 |
典型使用场景
- 判断卡在哪一层:连接阶段卡住是网络或端口问题,握手阶段卡住是加密与证书问题
- 核对请求内容:确认实际发出的请求头与主机名是否与预期一致
- 核对响应结果:确认状态码、跳转位置与响应头里的缓存与压缩策略
- 验证域名与证书:从输出里读出实际访问的地址与协商到的协议版本
- 走代理验证:用 -x 指定代理,确认通过代理链路访问是否正常
输出分段解读
输出分段解读
curl -v --connect-timeout 5 https://example.com/ -o /dev/null
# * Trying 93.184.216.34:443... # 已解析出地址,正在发起连接
# * Connected to example.com port 443 # TCP 三次握手成功
# * TLSv1.3 (IN), TLS handshake, Finished# 加密握手完成,协商出协议版本
# > GET / HTTP/2 # 实际发出的请求行
# > Host: example.com # 请求头里的主机名
# < HTTP/2 200 # 响应状态
# < content-type: text/html # 响应头
curl -vv -o /dev/null https://example.com/ # 更细的连接与握手中间过程
curl --trace-ascii /tmp/trace.txt https://example.com/ # 收发内容完整落盘关键行与指向
| 输出位置 | 含义 | 异常指向 |
|---|---|---|
| 解析阶段无输出或报无法解析主机 | 域名没有解析出地址 | 解析服务配置、域名拼写、解析链路 |
| Trying 一直不出现结果 | 连接尝试没有回应 | 端口未开放、策略丢弃、路由不可达 |
| Connected 后立即断开 | 握手完成但被立刻重置 | 服务端主动拒绝、中间设备清理会话 |
| TLS 行后报错 | 加密握手失败 | 证书过期或链不全、协议版本不匹配、中间设备拦截 |
| 只有请求行没有响应行 | 请求发出但拿不到响应 | 服务端处理异常、连接被中断 |
| 响应行状态码非预期 | 请求到达但业务返回错误 | 应用与服务端配置,需结合服务日志 |
排查时务必保留从解析到响应的完整片段:只截取响应头而丢掉连接与握手那几行,等于把最有信息量的部分删掉了。
脚本自动化里用 -sS 组合:静默模式去掉进度条,保留错误信息;排障时不要用纯 -s,会把关键线索一并静默掉。
用跳过证书校验的参数确实能让请求成功,但它掩盖的是真实的证书问题,仅限临时定位,修复必须回到证书链与系统时间上。