Python Requests 代理接入示例
使用 requests 读取环境变量、设置 HTTP 代理、超时并进行有限错误处理。
只只HTTP技术团队维护更新于 2026年8月2日
示例使用调用方项目自行管理的 requests 依赖。PROXY_URL 通过部署系统注入,格式为 http://<proxy-username>:<proxy-password>@<gateway-host>:<gateway-port>。
Python requests
import os
import requests
proxy_url = os.environ["PROXY_URL"]
proxies = {"http": proxy_url, "https": proxy_url}
response = requests.get(
"https://<public-test-host>/ip",
proxies=proxies,
timeout=(10, 30),
)
response.raise_for_status()
print(response.json())
依赖与配置
- 在项目虚拟环境中安装并锁定依赖。
- 代理值不进入源代码或镜像层。
请求
- HTTP 与 HTTPS 目标均使用同一个 HTTP 代理 URL。
- 分别设置连接和读取超时。
错误处理
- 区分代理错误、连接超时和目标状态。
- 只对幂等请求执行有限重试。
验证步骤
- 在虚拟环境中锁定
requests版本,并通过部署系统注入PROXY_URL。 - 先运行一次无代理请求记录本地出口,再运行示例并打印状态码和响应中的出口字段。
- 分别模拟错误网关端口、错误密码和过短超时,确认异常类型能被区分且日志不含代理字典。
预期结果
raise_for_status()不抛异常,代理请求返回的出口与本地公网 IP 不同。- 错误密码进入
requests.exceptions.ProxyError或对应407响应,连接超时与目标 HTTP 错误保持可区分。
失败边界
- 环境变量缺失会在发起网络请求前抛出
KeyError,不属于代理可用性故障。 - 示例只覆盖单次 HTTP 请求;高并发、连接池、重试和幂等边界应按业务单独设计。
安全
- 异常日志不输出代理字典。
- 响应正文按必要字段记录。
这篇内容解决了你的问题吗?
反馈只用于改进公开文档,不会提交账号或请求信息。