Python使用requests配置代理访问网站不生效,仍通过本机IP连接
requests 配置代理后未实际生效的排查与修正方法
- 最核心的代码配置错误:协议匹配不对应
requests 的代理匹配逻辑为严格根据请求URL的协议前缀匹配代理项:请求HTTP开头的地址时,仅读取proxies["http"]的配置;请求HTTPS开头的地址时,仅读取proxies["https"]的配置,不会跨协议自动复用代理规则。
你提供的测试代码中,请求地址为http://httpbin.org/ip(HTTP协议),但proxies字典内仅配置了https键的代理地址,找不到匹配项时requests会直接走本机网络发起请求,不会自动复用HTTPS的代理配置。
修正后的基础配置格式:proxies = { "http": "103.224.5.5:54143", "https": "103.224.5.5:54143" } - 其他常见踩坑点
- 若代理需要账号密码鉴权,配置项必须补充完整鉴权格式:
"http": "http://[代理账号]:[代理密码]@103.224.5.5:54143",仅填写IP+端口会因鉴权校验失败,最终请求自动 fallback 到本机直连。 - 若系统或当前shell环境中预先设置了
HTTP_PROXY、HTTPS_PROXY类全局代理环境变量,requests 默认会优先读取环境变量中的代理配置,和代码内的本地配置产生冲突。可在发起请求时添加trust_env=False参数,强制忽略系统环境变量的代理规则,仅读取代码中手动传入的代理配置:r = requests.get(url, proxies=proxies, trust_env=False)
- 若代理需要账号密码鉴权,配置项必须补充完整鉴权格式:
- 前置排查项
完成代码修正后若仍存在代理不生效的问题,可先手动验证代理本身的连通性:确认代理服务处于正常运行状态、服务器端口可正常连通、本机出口IP已经被加入代理的访问白名单,排除代理本身故障导致的请求直连。
内容的提问来源于stack exchange,提问作者ssfssss
相关产品推荐
相关产品推荐

