通过数据中心 IP 发出一百次请求,大概只有一次因断线失败;换成住宅或移动通道,这个比例会升到十分之一。这不是代理质量差,而是环境本身的特性:家庭宽带或蜂窝网络上的断线是正常现象,客户端必须自己扛过去,不能指望人工介入。下面说明断线频率差异从何而来、连接与读取超时该设多少、哪些错误值得重试,以及重试会怎样影响流量消耗。

为什么住宅和移动通道比服务器通道更容易断线

数据中心 IP 走的是服务商的专线,有冗余保障,抖动几乎为零——断线在那里很罕见,通常意味着系统性故障。住宅地址对应的是真实的家庭连接:路由器会重启,运营商会把用户切换到不同节点,DHCP 租约会更新,设备也可能休眠一分钟。移动通道在此基础上还要叠加基站间切换、网络制式切换以及短暂失去信号——这一切都发生在一台真实用户正在使用的真实设备上,而不是专门为你保留的端口上。运营商侧的 NAT 让数百个用户共用一个地址,这正是这类 IP 几乎无法被封禁的原因,详见为什么移动代理难以封禁。抗封禁能力的另一面,就是通道本身在物理上不如服务器稳定。

连接超时与读取超时的合理取值

连接超时(connect timeout)和读取超时(read timeout)是两回事,不能混为一谈。连接超时限定建立会话所需的时间:数据中心通道 3–5 秒足够,住宅和移动通道需要 8–15 秒,因为数据包在真实设备上要经过更多中间节点。读取超时限定连接建立后等待响应的时间,参考值是目标服务器预期响应时间的 2–3 倍,普通请求通常为 15–30 秒,重负载操作则更长。住宅通道上超时设得太短,会把正常的网络延迟误判为失败;设得太长,则会白白占用连接、消耗流量。

重试之间的指数退避

断线后立刻重试是个坏主意:如果原因是节点过载或短暂失去信号,立即重试大概率会落入同样的状态。指数退避会随每次尝试增加等待时间——比如 1、2、4、8 秒——给通道留出恢复的时间。建议再叠加 20%–30% 的随机抖动:否则同一脚本的并行线程会在共同故障后同步重试,自己制造出一波负载高峰。把重试次数限制在三到四次比较合理——超过这个数,成功率几乎不再提升,而时间和流量消耗却在线性增长。

哪些错误该重试,哪些不该

值得重试的是那些看起来像临时性通道故障的情况:连接中断、超时、502/503/504 错误,以及没有服务器响应的网络异常。不值得重试的是那些重试也不会改变结果的情况:请求体格式错误的 400、代表授权问题的 401/403、代表资源不存在的 404。429 需要单独处理——它不是故障,而是服务器明确要求放慢速度,应该按响应头中给出的等待时间重试,而不是套用通用的退避方案。不加区分地重试所有错误,是脚本对着一堵墙敲上几个小时、却不停下来报告问题的常见原因。

如何区分通道中断和平台封锁

通道中断意味着完全没有响应:超时、连接被重置、TCP 或 TLS 层面的错误。封锁则是有响应的,只是不是你想要的:403 状态码、用验证码代替内容、跳转到验证页面,或者返回大小正常但并非预期数据的 HTML。前者可以靠重试解决,后者不行——用同一个地址对封锁发起重试,得到的几乎总是同样的结果;换地址走轮换才是另一个话题,详见如何通过 API 配置 IP 轮换。住宅或移动通道上的每一次重试都是独立的会话,而这类通道按流量计费:对已被封锁的地址疯狂重试解决不了问题,只会白白消耗流量去换取同一个拒绝结果。限制重试次数、区分响应码,既关乎稳定性,也关乎预算。

常见问题

一个请求该重试几次才算合理,超过之后就该放弃?

多数场景下三到四次、配合指数增长的等待时间就够了。如果都失败了,在同一地址上第五次成功的概率也不高,而流量消耗还在持续增加——更合理的做法是通过轮换更换地址,或者把错误直接返回给调用方。

数据中心通道和住宅通道需要设置不同的超时值吗?

需要。数据中心通道延迟稳定且低,短超时是合理的。住宅和移动通道要经过真实用户的实际设备,超时值应明显放宽,否则正常的网络延迟会被不断误判为故障。

所有类型的错误都能用同一套重试逻辑处理吗?

不能。网络故障和 5xx 响应适合延迟重试。授权错误和请求格式错误重试没有意义。429 需要按服务器指示的时间等待,而验证码、跳转、403 这类封锁迹象,需要的是更换地址,而不是对同一个 IP 重试。

适合重试密集型任务的住宅与移动通道见代理专区:同一页面可以按具体场景估算流量消耗,并在了解移动代理与住宅代理的区别后,选出稳定性与价格平衡合适的通道。