用 curl 测试 HTTP 代理
用设有时限的 curl 测试检查代理连通性、HTTPS 隧道、响应状态与绕过规则,无需改动设备的全局代理设置。
将 127.0.0.1:8080 换成服务提供的端点,或从HTTP 代理列表中选择一个端点,然后对无害的 HTTPS 目标执行以下命令:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/回环地址表示你自己机器上的监听端。这条命令明确选择该代理,清除本次调用的 curl 绕过列表,给连接建立留出五秒,总耗时上限为十五秒。浏览器和系统的代理设置不会改变。
如果 shell 把 curl 设成了其他程序的别名,请使用真正的 curl 可执行文件;curl --version 可识别所用构建版本。如果监听端本身要求 TLS,请使用其文档注明的代理 URL 协议。
分清四项结果,别只看一个成功标志
- 已连接选定代理:说明该地址和端口可达。
- CONNECT 已被接受:代理打开了通往 HTTPS 目标的隧道。
- 目标证书已验证:TLS 已完成,并执行了预期的信任检查。
- 已收到目标响应:检查其状态和内容,确认是否得到应用所需的结果。
即使隧道正常,目标仍可能返回 403 或 429。curl 收到 HTTP 错误响应后,也可能以成功状态退出,因此要同时记录响应状态和 curl 的错误结果。仅有 TCP 连接成功或 CONNECT 成功并不够。
便于重复对比的精简结果
在类 Unix shell 中,可以丢弃响应正文,只输出隧道状态、目标响应状态、连接对端和耗时:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect} peer=%{remote_ip} total=%{time_total}\n' https://example.com/http_connect 描述隧道响应;http_code 描述最终的 HTTP 响应。remote_ip 是 curl 的连接对端,并非对代理出口地址的独立测量。在其他系统上,请替换 /dev/null,或保留响应正文。
如果结果失败,先找出失败的连接建立或传输步骤,再在允许直连的情况下,对同一目标做直连对比:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/--noproxy '*' 会绕过代理。如果两条路径都在证书验证阶段失败,问题可能出在共用的信任配置;如果直连成功而 CONNECT 被拒绝,则应考虑代理认证或策略。分享详细输出前先检查一遍,因为其中可能包含可识别身份的信息。
将端点、目标和时间戳与结果一起保存。这只能说明该次请求中哪些环节成功;未来的可用性、隐私及负载下的性能,还需要各自的证据。