如何在requests.Session中配置代理?多种尝试后仍使用本地IP
解决requests.Session代理不生效的问题
核心问题:代理格式未按requests要求的字典结构设置
你的代理地址格式是正确的,但requests的proxies参数需要明确对应请求协议(http/https)的键值对,而非单独的字符串。你之前的尝试都因格式错误导致代理未被正确识别。
正确实现代码
import requests # 替换为你的代理地址 proxy = "http://username:password@url_of_proxyprovider:port" # 构造覆盖http和https请求的代理字典 proxies = { "http": proxy, "https": proxy } with requests.Session() as ses: # 方式1:在Session中全局设置代理 ses.proxies.update(proxies) # 方式2:初始化Session时直接传入代理(二选一即可) # ses = requests.Session(proxies=proxies) # 发送请求,验证代理是否生效(可以访问httpbin.org/ip查看当前IP) resp = ses.get("https://httpbin.org/ip") print(resp.text)
你之前方法的错误点
- 方法1:如果
proxy是单个字符串而非字典,ses.proxies.update()无法正确解析,因为update需要键值对格式 - 方法2:
s是请求返回的Response对象,修改它的proxies属性完全无效,请求已经发送完成 - 方法3:
get请求传入的proxies参数必须是字典格式,传入单个字符串会被requests忽略
额外排查点
- 先通过curl验证代理可用性:
如果curl也无法使用代理,说明代理地址、账号密码或端口有误,联系代理提供商确认curl -x http://username:password@url_of_proxyprovider:port https://httpbin.org/ip - 若代理是HTTPS类型,确保代理证书可信任,或临时添加
verify=False(生产环境不推荐):resp = ses.get("目标URL", verify=False)
内容的提问来源于stack exchange,提问作者Rezzy
相关产品推荐
相关产品推荐

