字里行间

curl 报错 5、6、7 有什么区别?按解析与连接阶段排查

curl 报错 5、6、7 都发生在网页内容下载之前,但代表的阶段不同:5 是代理主机解析失败,6 是目标主机解析失败,7 是已经得到地址却无法建立连接。先分清退出码,能避免盲目重装客户端。

退出码 5:找不到代理主机

如果命令使用了形如 http://proxy.example:7890 的代理,而代理主机名无法解析,curl 会返回 5。机场客户端通常监听本机地址,更适合写成明确的 127.0.0.1 和实际端口。若你填了一个局域网设备名,先确认这个名字在当前网络可以解析。

检查环境变量和命令行参数是否指向同一个代理。尤其留意 HTTPS_PROXY、ALL_PROXY 与手工 --proxy 是否互相覆盖。不要把订阅地址当作代理服务器地址。

退出码 6:找不到目标主机

6 表示目标域名未解析出可用地址。先检查 URL 是否拼错,再比较系统解析与代理远程解析。SOCKS5 场景中,socks5:// 和 socks5h:// 的 DNS 处理位置不同;排障时应明确使用哪一种,不能只写“开了 SOCKS”。

用两个不同域名对照:若都返回 6,优先检查 DNS 路径;只有单个域名失败,则核对该域名的记录和输入。不要用关闭 HTTPS 验证来处理解析失败,它与证书阶段无关。

退出码 7:地址有了,但连不上端口

7 表示连接主机失败。此时检查客户端是否启动、代理端口是否监听、协议类型是否匹配,以及防火墙是否阻止本机连接。Windows 可用 Test-NetConnection 127.0.0.1 -Port 端口 验证监听;也可以让 curl 访问一个轻量 HTTPS 目标并记录错误。

若本地代理端口可连,但访问目标仍返回 7,再看日志里失败的是代理入口、节点入口还是目标地址。退出码相同不代表故障位置完全相同,必须结合命令中的代理配置和日志时间。

一张最小排障表

保留:完整但已脱敏的命令、退出码、代理类型、代理地址、目标域名、测试时间、本地端口检查结果。先修复最靠前的失败阶段:5 修代理主机解析,6 修目标解析,7 查连接与端口。

连续三次对同一目标返回退出码 0、HTTP 状态符合预期,并且客户端日志没有连接失败,才算通过。这样处理机场客户端故障,比把 5、6、7 都归为“节点坏了”更准确。

参考资料

评论

搜索文章

正在加载搜索…