Python3 Requests未使用传入代理:请求仍显示本地IP问题求助
解决Python Requests代理未生效的问题
我之前调试代理的时候也踩过类似的坑,你的代码逻辑看起来没问题,但没生效大概率是这几个细节没处理好:
1. 代理地址必须包含完整协议前缀
Requests要求代理参数里的地址必须带协议前缀(比如http://或https://),很多人容易漏掉这一点。你现在的x.x.x.x:xxxx缺少协议标识,Requests可能无法正确识别代理类型,直接走了本地网络。
修改后的代理配置应该是这样:
proxies = {'http': 'http://x.x.x.x:xxxx', 'https': 'http://x.x.x.x:xxxx'}
(顺便把https条目也加上,万一后续请求HTTPS站点也能用上)
2. 免费代理可能已经失效
sslproxies.org上的免费匿名代理存活时间通常很短,你拿到的代理可能已经被目标站点封禁或者无法正常连接了。建议先手动验证代理的可用性:
- 用curl测试:
curl -x http://x.x.x.x:xxxx http://www.lagado.com/proxy-test - 如果curl也返回本地IP,说明代理本身就是无效的,换一个新的代理试试。
3. 排除系统默认代理的干扰
有时候系统的全局代理设置会覆盖Requests的自定义代理配置,导致你的代理不生效。可以通过创建Session并禁用环境变量代理来解决:
import requests url = 'http://www.lagado.com/proxy-test' proxies = {'http': 'http://x.x.x.x:xxxx', 'https': 'http://x.x.x.x:xxxx'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'} # 创建Session并禁用系统代理干扰 session = requests.Session() session.trust_env = False # 忽略系统环境变量中的代理设置 res = session.get(url, proxies=proxies, headers=headers) print(res.text)
4. 检查代理是否需要认证
有些标注为“匿名代理”的服务其实还是需要用户名密码认证的,如果代理要求认证,你需要把凭证加到代理地址里:
proxies = {'http': 'http://username:password@x.x.x.x:xxxx'}
按照上面的步骤排查,应该就能解决代理不生效的问题了。
内容的提问来源于stack exchange,提问作者chuck
相关产品推荐
相关产品推荐

