让一次代理请求成功很容易,构建可靠代理工作流则需要工程化控制。生产任务必须设置明确超时、有限重试、稳定的会话规则,并用日志区分代理故障与 DNS、TLS、限流或目标端错误。
本文使用 Python Requests 与 urllib3 Retry。Requests 官方文档支持按请求传入代理字典、使用 Session 复用连接,并通过传输适配器设置重试。文档也提醒:环境变量中的代理配置可能覆盖 Session 的代理,因此示例在每次请求中显式传入 proxies。

1. 从最小且安全的配置开始
不要把账号密码写进源代码或日志。完整代理 URL 应保存在密钥管理服务或环境变量中,文档只使用占位符。
import os
import requests
proxy_url = os.environ["PROXY_URL"]
proxies = {"http": proxy_url, "https": proxy_url}
response = requests.get(
os.environ["TARGET_URL"],
proxies=proxies,
timeout=(5, 20),
)
response.raise_for_status()
print(response.status_code)
二元超时分别控制连接时间和读取时间,避免故障路线长期占用工作线程。只有当业务确实把非 2xx 状态视为失败时,才调用 raise_for_status()。
2. 先确定轮换与粘性会话规则
代理可能按请求、连接、时间窗口或会话标识轮换。独立采样任务通常适合新路线;登录后多步骤、已授权的业务流程则需要保持 Cookie、地区和网络身份一致。不要通过新出口盲目重试写操作,否则可能造成重复提交。除非业务实现幂等键,否则自动重试应限制在 GET、HEAD 等幂等方法。
3. 使用指数退避和有限重试
import os
from requests import Session
from requests.adapters import HTTPAdapter
from urllib3.util import Retry
retry = Retry(
total=3,
connect=3,
read=2,
status=2,
backoff_factor=0.5,
status_forcelist={429, 502, 503, 504},
allowed_methods={"GET", "HEAD", "OPTIONS"},
respect_retry_after_header=True,
)
session = Session()
session.mount(" HTTPAdapter(max_retries=retry))
response = session.get(
os.environ["TARGET_URL"],
proxies=proxies,
timeout=(5, 20),
)该策略只处理少量瞬时故障,并尊重服务器的 Retry-After。重试次数必须有限;连续失败通常意味着配置、授权、容量或目标端问题,增加次数不会真正解决。
4. 有意识地管理 Session
Session 会复用连接和 Cookie。建议每个逻辑身份或任务边界使用独立 Session,避免在无隔离设计时跨客户或跨任务共享可变 Session。粘性代理任务应在完整流程内保留同一个会话标识,结束后主动关闭。
5. 记录可用于排障的证据
每次尝试记录脱敏任务 ID、目标主机、地区、代理产品、会话标识哈希、尝试次数、连接耗时、总延迟、HTTP 状态和异常类型。绝不记录代理密码、完整鉴权头、Cookie 或敏感响应内容。
- DNS 错误:连接前无法解析主机。
- 连接超时:路线或网关无法建立连接。
- TLS 错误:证书或握手失败,生产环境不能用关闭验证来“修复”。
- 407:代理鉴权失败。
- 429:目标限流,应降低速率并遵守 Retry-After。
- 403 或挑战页:应检查授权与目标政策,不进行绕过。
- 读取超时:已连接但响应未在限制内完成。
6. 扩容前先做小规模验证
先用获准访问的检测端点确认出口国家、ASN、IP 版本与会话行为,再以保守速率测试真实目标。衡量有效结果率、延迟、重试率和单位有效结果成本,而不是只看 HTTP 成功。
上线检查清单
- 凭据来自密钥存储并从日志中脱敏。
- 每个请求都有连接与读取超时。
- 重试有限、带退避且不覆盖危险写操作。
- 会话生命周期符合业务身份要求。
- 遵守 429、Retry-After、目标条款和适用的 robots 指令。
- 保持 TLS 验证。
- 仪表盘统计有效产出而非虚假成功率。
选择合适的代理模式
公开数据采集与分布式测试可评估 98IP 的动态住宅代理;需要更长期网络身份时,可比较粘性会话或静态住宅代理。本文由 98IP 团队发布并披露服务关系,仅应用于你有权访问的系统与数据。
官方参考
Requests Advanced Usage,查阅于 2026 年 8 月 16 日,包含代理字典、Session 与 urllib3 Retry 的说明。
结论:可靠性来自明确控制和可衡量结果,而不是无限重试。