代理错误分层排查示意图

代理失败看起来常常相同:请求没有返回预期数据。但 407、429、超时与连接重置属于不同层级,处理方式也完全不同。把所有故障都交给“立即重试”,只会放大限流、延长队列并掩盖真实原因。本指南提供一套可复现的分层排查方法,适合网页抓取、价格监测、广告验证与市场研究等合规数据任务。

先确定故障发生在哪一层

把一次请求拆成客户端、代理认证、代理出口、目标站点和应用逻辑五层。每次测试固定目标、区域、会话策略与并发度,并记录时间戳、代理节点、HTTP 状态、响应头、连接阶段与总耗时。一次只改变一个变量,才能判断问题来自凭据、配额、网络还是目标站点。

407:先修认证,不要盲目轮换

407 表示代理要求认证。首先核对用户名、密码、端口和认证方式;确认凭据没有被 URL 编码破坏,也没有把目标站点的 Authorization 与代理的 Proxy-Authorization 混用。然后用单请求、低并发测试同一凭据。如果所有节点都返回 407,优先检查账户状态、套餐权限或 IP 白名单;如果只有部分节点失败,再隔离具体区域和协议。

429:尊重 Retry-After 并降低压力

429 是速率限制信号,可能由代理、网关或目标站点产生。先查看 Retry-After 与 Proxy-Status 等响应信息,再判断限制发生在哪一跳。不要立即换 IP 继续冲击。应降低并发、加入随机抖动的指数退避、控制每个域名的请求预算,并缓存不会频繁变化的数据。重试必须有上限;超过预算后进入延迟队列,而不是无限循环。

超时:按连接阶段切分

把超时分为 DNS、TCP 连接、TLS 握手、首字节和正文读取。连接超时通常指向路由、节点可用性或防火墙;首字节超时更可能与目标响应慢、出口拥塞或请求过重有关;读取超时则要检查大响应、带宽与流式处理。分别设置连接与读取超时,避免一个总超时掩盖阶段差异。

连接重置:检查协议与复用

连接重置可能来自代理、目标站点、中间设备或客户端连接池。先关闭连接复用做对照,再检查 TLS 版本、HTTP/2 或 HTTP/3 协商、空闲连接寿命与请求体大小。若重置集中在某一区域或节点,应从池中暂时隔离并进行健康检查;若只在高并发出现,应降低每连接请求数并缩短过长队列。

建立安全的重试矩阵

  • 407:修正认证后再试,默认不自动轮换。
  • 429:遵守 Retry-After,指数退避并降低并发。
  • 连接超时:可在有限次数内切换健康节点。
  • 读取超时:先评估响应大小和目标性能,再决定重试。
  • 连接重置:短暂退避后换新连接,保留节点与协议日志。
  • 4xx 业务错误:除非请求条件改变,否则不要重试。

最小诊断记录

每次失败至少记录请求 ID、UTC 时间、目标域名、代理区域、会话类型、状态码、错误阶段、总耗时、重试次数与最终结果。不要在日志中保存完整代理密码、Cookie、个人数据或目标站点敏感内容。对合法授权的数据任务,建立保留期限与访问控制。

发布前检查清单

  1. 单请求是否成功?
  2. 407 是否已排除凭据、白名单与套餐问题?
  3. 429 是否遵守等待时间并限制重试?
  4. 超时是否按 DNS、连接、TLS、首字节和读取拆分?
  5. 重置是否与协议、复用、区域或并发相关?
  6. 是否设置最大尝试次数、总时间预算和熔断?
  7. 日志是否避免记录凭据与个人数据?

FAQ

可以用无限轮换解决 429 吗?

不建议。429 是容量或政策信号,无限轮换可能放大压力并违反目标站点规则。优先降低速率、遵守等待时间并确认使用权限。

407 与目标站点的 401 有什么区别?

407 通常来自代理认证层,401 通常来自目标资源的身份验证层。分别检查 Proxy-Authenticate 与 WWW-Authenticate 等信息。

哪类错误适合自动重试?

短暂网络故障可在严格预算内重试;认证错误、权限错误和多数确定性 4xx 不应无条件重试。

合规、低速率且可审计的采集流程,比单纯增加 IP 数量更可靠。需要测试不同区域与会话策略时,可从 98IP 主页 了解可用的代理类型,并始终遵守目标站点条款、适用法律和数据最小化原则。

资料依据:RFC Editor,HTTP Semantics,2022 年 6 月;Additional HTTP Status Codes,2012 年 4 月;The Proxy-Status HTTP Response Header Field,2022 年 6 月。