查看 curl 详细输出中最后完成的操作。相比‘代理超时’,‘已连接代理,但没有 CONNECT 响应’能把问题范围缩小得多。

使用有时限的请求,并将本地示例替换为你的 HTTP 代理;可从HTTP 代理列表寻找其他端点作比较:

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/

--connect-timeout 5 为连接建立提供一份共同的时间预算,包括适用的查找和握手;它并非给每个阶段各分配五秒。--max-time 15 限制整个操作的总时长,包括建立连接后的传输时间。

进度停在哪里接下来排查什么
未连接到代理代理主机名解析、监听端口、路由和防火墙策略。
已连接代理;没有隧道响应代理负载、认证协商、访问策略,以及从代理到目标的可达性。
隧道已接受;TLS 未完成目标可达性、TLS 协商和受管理的流量拦截。
目标响应头已到达;正文停滞源站传输行为、中间设备缓冲,以及应用是否有意保持静默。

底层握手顺序可参阅CONNECT 如何承载 HTTPS。接近连接时间预算时停止,提示问题可能在建立阶段;稍后到达总时限才停止,则提示传输尚未完成。应结合操作顺序和耗时判断,单凭耗时无法识别具体组件。不同 curl 构建的日志措辞可能不同,TCP 端口开放也不能证明 CONNECT 正常。

保持一侧不变

通过获准的直连路径访问同一目标作比较:

curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/

然后通过同一代理访问另一个无害目标作比较。如果只有一个目标失败,排查该路径或目标访问策略。如果所有目标都停在同一个连接建立步骤,排查共同经过的代理路径。保存开始时间、代理端点、目标及最后完成的阶段;分享日志前删除凭据、令牌、Cookie 和私有名称。

连接保持打开却没有有效进展时

文件传输除连接建立和总时限外,可能还需要低速限制:

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 60 --speed-limit 100 --speed-time 20 https://example.com/

这会在持续传输速率连续 20 秒低于每秒 100 字节时中止,同时保留 60 秒的总时限。应按工作负载选择数值。事件流在长时间静默期间也可能正常,因此下载任务的规则可能错误地中止事件流。

调高所有时限只会推迟症状出现。立即反复重试,可能给过载路径增加连接。用少量经过考虑的对比来诊断;之后应用采用的任何重试策略,都需要独立的总时间预算,并考虑重复操作是否安全。

相关文章