Requests配置代理后仍用本机IP且HTTPS请求报WinError 10060错误如何解决
问题1:请求仍使用本机IP的排查解决
- 校验代理配置格式是否符合要求
Requests要求代理字典必须同时包含http和https两个配置项,仅配置单条规则会导致对应协议的请求直接走本机直连。正确配置示例如下:
import requests proxies = { "http": "http://[代理地址]:[代理端口]", # 注意:除非代理本身支持HTTPS协议接入,否则HTTPS请求的代理地址仍填http前缀 "https": "http://[代理地址]:[代理端口]" } # 可以请求IP查询接口验证代理是否生效 resp = requests.get("https://api.ipify.org", proxies=proxies) print(resp.text)
如果代理需要身份认证,需要将账号密码拼接在代理地址中:"http://[用户名]:[密码]@[代理地址]:[代理端口]"
- 禁用系统环境变量覆盖
Requests默认会读取系统的HTTP_PROXY、HTTPS_PROXY、NO_PROXY环境变量,若参数配置和环境变量冲突,或目标地址命中NO_PROXY规则,会自动走直连。可添加trust_env=False参数强制忽略环境变量:
resp = requests.get("https://api.ipify.org", proxies=proxies, trust_env=False)
- 校验Session代理配置
如果使用requests.Session()复用连接,需要将代理配置绑定到Session实例,单次请求传参可能不生效:
session = requests.Session() session.proxies = proxies session.trust_env = False resp = session.get("https://api.ipify.org")
问题2:HTTPS请求触发WinError 10060超时的排查解决
具体报错信息:
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
- 验证代理本身的HTTPS转发能力
大部分免费公共代理仅支持HTTP协议请求转发,遇到HTTPS的CONNECT请求会直接无响应,导致超时。可以先在浏览器配置同款代理访问HTTPS站点,确认代理可用性。 - 检查系统安全软件拦截
Windows防火墙、第三方杀毒软件大概率会拦截Python进程发起的代理转发请求,可临时关闭安全软件后重试,确认是否是拦截导致的超时。 - 调整请求配置
- 适当拉长超时阈值,避免默认超时时间过短被判定为失败:
requests.get("目标地址", proxies=proxies, timeout=30) - 若代理使用自签名SSL证书,可临时关闭SSL验证(仅测试场景使用,生产环境不推荐):
requests.get("目标地址", proxies=proxies, verify=False)
- 适当拉长超时阈值,避免默认超时时间过短被判定为失败:
- 核对代理端口配置
部分代理服务会将HTTP和HTTPS的转发端口分开设置,注意核对https配置项对应的端口是否正确。
内容的提问来源于stack exchange,提问作者Zeyrox
相关产品推荐
相关产品推荐

