### [Python Requests和HTTPX怎么配代理?会话、超时与环境变量](https://www.jiyueip.com/article/7955) **Published:** 2026-07-22T17:59:52 **Author:** 斑斓助理 **Excerpt:** Python Requests与HTTPX的代理API、环境变量、同步异步客户端和连接池行为并不完全相同。本文说明HTTP/SOCKS依赖、trust_env、NO_PROXY、超时、TLS、重试及凭据保护。 Python脚本用代理时,最常见的问题不是“字典怎么写”,而是把Requests示例直接套到HTTPX、异步客户端或不同版本。两个库的代理参数、环境变量处理和连接池接口会随版本演进,生产代码应以当前安装版本官方文档为准。 下面重点讲不容易过时的配置思路:作用域、凭据、超时、连接复用和验证。 ## 一、先确认使用哪个客户端 | 场景 | Requests | HTTPX | | --- | --- | --- | | 同步请求 | Session与请求函数 | Client与请求函数 | | 异步请求 | 非核心能力 | AsyncClient | | 环境变量 | 通常读取标准代理变量 | 可按配置控制环境信任 | | SOCKS支持 | 需要对应可选依赖 | 需要当前版本支持的可选依赖 | ## 二、不要在源码写完整代理URL 用户名密码写进Python文件,会进入Git历史、镜像、日志和异常回溯。使用环境变量、密钥管理或运行平台Secrets,并只在创建客户端时读取。 日志中记录节点版本ID,不输出URL的userinfo部分。 ## 三、Requests会话为什么重要 `requests.Session` 可以复用连接、统一头部和代理配置。频繁调用顶层函数会失去部分连接复用优势。结构示意: ``` import requests session = requests.Session() session.proxies.update({ "http": proxy_url, "https": proxy_url, }) response = session.get(health_url, timeout=(5, 20)) response.raise_for_status() ``` 示例中的超时和URL必须按业务设置。注意“https目标”不代表代理URL一定使用https方案,取决于代理服务和客户端支持。 ## 四、HTTPX同步与异步不要混用 HTTPX提供同步Client和异步AsyncClient。异步代码应在生命周期内复用AsyncClient,并正确关闭,避免每次请求新建连接池。代理参数名称和挂载方式要查看当前版本文档,不用旧博客的过期接口。 ## 五、环境变量什么时候会覆盖代码 `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY` 和 `NO_PROXY` 可能影响库行为。HTTPX有控制是否信任环境的选项;Requests也有Session环境处理。测试时明确: - 是否允许读取宿主环境; - 代码显式代理和环境变量谁优先; - NO\_PROXY是否命中目标; - 大小写变量是否冲突; - 容器或CI是否注入了额外变量。 ## 六、SOCKS依赖和DNS解析 使用SOCKS通常需要安装库的可选依赖。不同URL方案可能表示本地解析或把主机名交给代理解析,具体行为以对应实现为准。 DNS路径会影响内部域名、IPv6和信息暴露。不要只验证公网IP。 ## 七、超时要分阶段设置 连接超时和读取超时含义不同。连接阶段包括到代理和可能的上游隧道,读取超时则是连接建立后等待数据。HTTPX还可能提供更细的写入、连接池等超时。 通用阶段说明见[代理连接、读取与TLS超时区别](https://www.jiyueip.com/article/7153)。 ## 八、遇到502或504能否重试 读取请求可对部分短暂网络错误做有限退避;写请求必须先解决幂等和状态查询。不要在库级别把所有异常统一自动重试。 安全恢复方法见[代理请求重试、幂等键与对账](https://www.jiyueip.com/article/7937)。 ## 九、TLS证书错误不能verify=False 代理环境出现证书不受信时,先检查系统时间、域名、SNI、证书链和企业TLS策略。测试代码也不应形成可复制到生产的 `verify=False` 模式。 完整排查见[HTTPS代理TLS证书错误指南](https://www.jiyueip.com/article/7925)。 ## 十、切换代理为什么要新建客户端 连接池可能继续复用旧代理连接。切换节点、凭据或路由时,停止分配新请求到旧客户端,等待在途请求完成,再关闭旧会话并创建新客户端。 不要在共享客户端被多线程使用时直接修改代理字典。 ## 十一、最小验证代码应该测什么 1. 访问自有HTTPS健康端点; 2. 确认状态码和TLS验证; 3. 低频核对出口IP; 4. 测试NO\_PROXY内部地址; 5. 模拟连接超时、407和502; 6. 关闭客户端,确认资源释放。 ## 十二、常见问题 | 现象 | 原因方向 | | --- | --- | | 浏览器正常,Python超时 | Python不读取浏览器代理 | | SOCKS方案报缺模块 | 可选依赖未安装 | | 内部API走代理 | NO\_PROXY或环境信任配置 | | 切节点后出口没变 | 连接池复用旧连接 | | 异步连接泄漏 | AsyncClient未正确关闭 | 生产代理配置应封装成明确的客户端工厂和生命周期,而不是在每个请求旁边拼接一串带密码的URL。 **Tags:** HTTP代理, 代理IP, 服务器运维, 网络故障排查 **Categories:** 行业洞察 ---