curl 报错 22 怎样保留原因?用 --fail-with-body 同时核对状态码与错误正文
终端出现 curl 的 22 号错误时,先查看实际 HTTP 状态。这个数字不会直接告诉你节点是否失效;使用了哪些选项,会影响 curl 怎样把服务端响应转换成退出状态。
本文适合自己的 Windows PowerShell 与 curl.exe,只测试你有权读取的小型公开资源。不要把订阅令牌、登录接口或会产生写入的请求复制进排障示例。

示意图:HTTP 响应、工具退出码与正文内容分别核对,保存文件不等于下载成功。
先分清两个失败选项
curl 官方手册说明:通常情况下,--fail-with-body 在 HTTP 状态为 400 或更高时返回错误 22,同时保留响应正文;--fail 会抑制这类错误正文。两者互斥,不一起添加。
先运行 curl.exe --help all,确认本机支持需要的选项。若不支持,先记录当前环境,不把“不认识选项”的报错写成网络故障,也不假定网上手册对应本机版本。
一次只读请求保存三份证据
在自己新建的测试目录里运行以下命令。将示例地址换成获准使用的真实 HTTPS 资源;示例不保证返回特定状态。
$targetUrl = 'https://example.com/'
curl.exe -q --silent --show-error --fail-with-body --connect-timeout 10 --max-time 30 --dump-header 'response-headers.txt' --output 'response-body.bin' --write-out 'HTTP=%{http_code}\n' $targetUrl
$curlExitCode = $LASTEXITCODE
"curl_exit=$curlExitCode"
这里的等待时长是示例测试边界,不是某家机场的性能要求。文件名应在空测试目录使用,避免覆盖自己原来的记录。若要显式走本地代理,按客户端当前实际协议与端口补充 --proxy,不照抄别人的端口。
命令不跟随跳转、不自动重试,也不跳过证书验证。$LASTEXITCODE 要紧接着 curl 保存,避免被后续原生命令的退出码覆盖。
怎样读输出才不误判
| 观察 | 下一步 |
|---|---|
| HTTP 为 4xx/5xx,同时退出码为 22 | 核对响应头与错误正文的说明 |
| 没有有效 HTTP 状态,出现其他退出码 | 先定位解析、连接、TLS 或传输阶段 |
| HTTP 为 3xx | 核对跳转目标,不能当成已取得最终内容 |
| HTTP 为 2xx,但正文是登录页或错误说明 | 继续验收内容,不能只看退出码 |
response-body.bin 只是保存收到的字节;即使原来想下载安装包,它也可能是一张错误页面。先看响应类型和文本说明,不双击运行,不把保存出的文件当作下载成功。
对照与脱敏验收
保持目标 URL、请求方法和代理条件一致,再比较另一节点或另一条获准路径。只改变一个变量,并保留每轮的状态、退出码、正文类型与提示。HTTP 拒绝与传输中断在记录里分开写。
响应头和正文可能包含 Cookie、私人路径或账号提示。发工单时整理必要的状态与脱敏片段,不直接上传整份文件。验收完成应当能解释“请求得到什么响应、curl 怎样退出、目标内容是否符合预期”三件事,而非只消除终端的红字。整理机场推荐依据时,保留失败正文有助于复查,但错误详情不能代替实际使用验收。
来源与核验日期
官方资料核验日期:2026-10-11。本文提供操作与判断方法,不代表本站对某家机场的实测结论。
评论