Python Requests设置代理后IP未变更的问题咨询
解决Requests设置代理后IP未变更的问题
你的问题核心是代理配置与请求协议不匹配,加上代理地址格式不规范,导致代理未生效。以下是具体原因和修复方案:
问题原因
- 协议不匹配:你请求的是HTTPS地址(
https://www.myip.com/),但仅配置了http字段的代理。Requests会根据请求的URL协议选择对应代理,HTTPS请求会忽略http代理,直接使用本地IP发起请求。 - 代理地址缺少协议前缀:代理地址需要明确指定协议(
http://或https://),否则Requests无法正确解析代理地址,导致代理失效。 - 代理可用性问题:如果代理IP/端口失效、网络不通,或者需要身份认证但未配置,也会导致代理不生效。
正确配置示例
针对你的需求,将代理配置为同时支持HTTP和HTTPS请求,并补充协议前缀,示例代码如下:
import requests response = requests.get( url="https://www.myip.com/", proxies={ # HTTP请求用该代理 "http": "http://100.100.100.100:8080", # HTTPS请求必须配置对应的代理(多数HTTP代理可转发HTTPS请求) "https": "http://100.100.100.100:8080", }, headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", } ) # 验证IP是否变更 print(response.text)
如果代理需要用户名和密码认证,格式如下:
proxies={ "http": "http://username:password@100.100.100.100:8080", "https": "http://username:password@100.100.100.100:8080", }
额外排查要点
- 先测试代理可用性:用
curl命令验证代理是否能正常访问目标网站,比如curl -x http://100.100.100.100:8080 https://www.myip.com/ - 关闭系统全局代理:避免系统代理覆盖代码中的配置
- 临时关闭证书验证(仅测试用):如果代理存在证书问题,可添加
verify=False参数(生产环境不建议)
内容的提问来源于stack exchange,提问作者shim robin
相关产品推荐
相关产品推荐

