使用Python Requests时代理服务器未更换公网IP的问题排查
排查requests代理未生效的问题
让我帮你一步步排查这个问题——这种情况通常是代理配置没生效或者代理本身存在问题,咱们来逐个分析可能的原因:
1. 代理协议与目标地址不匹配
你当前请求的是http://ipinfo.io/ip,但很多公共代理可能只支持HTTPS,或者需要同时配置HTTP和HTTPS的代理映射。试试把请求地址换成HTTPS版本,同时完善代理字典:
import requests proxyDict = { "http": 'http://81.93.73.28:8081', "https": 'http://81.93.73.28:8081' # 多数HTTP代理也能处理HTTPS请求 } r = requests.get('https://ipinfo.io/ip', proxies=proxyDict) print(r.text)
如果是SOCKS5类型的代理,你需要先安装依赖:pip install requests[socks],再修改协议:
proxyDict = { "http": 'socks5://81.93.73.28:8081', "https": 'socks5://81.93.73.28:8081' }
2. 代理本身不可用或为透明代理
很多公共代理要么已经失效,要么属于透明代理——这类代理会把你的真实IP暴露给目标服务器,所以你看到的还是自己的公网IP。可以先通过curl验证代理有效性:
curl -x http://81.93.73.28:8081 https://ipinfo.io/ip
如果返回的还是你的IP,说明这个代理本身无法隐藏你的真实地址,建议更换匿名或高匿类型的代理。
3. 系统环境代理覆盖了手动配置
requests默认会读取系统的代理环境变量(比如HTTP_PROXY、HTTPS_PROXY),如果这些变量存在,可能会覆盖你手动设置的proxyDict。你可以强制禁用系统代理来测试:
r = requests.get('https://ipinfo.io/ip', proxies=proxyDict, verify=False) # verify=False 用于跳过SSL证书验证,部分代理需要这个设置
或者先测试无代理的情况,确认基础IP:
r = requests.get('https://ipinfo.io/ip', proxies={"http": None, "https": None}) print(r.text)
4. 代理需要身份认证
有些代理服务器要求用户名和密码才能使用,你的配置里缺少认证信息,导致代理拒绝转发请求,requests自动 fallback 到直接连接。如果是这种情况,需要修改代理格式:
proxyDict = { "http": 'http://your_username:your_password@81.93.73.28:8081', "https": 'http://your_username:your_password@81.93.73.28:8081' }
5. 本地网络存在限制
你的本地网络(比如公司、校园防火墙)可能拦截了代理请求,导致无法连接到代理服务器,只能直接访问目标地址。可以尝试换一个网络环境(比如手机热点)测试,或者检查本地防火墙是否限制了代理端口的访问。
内容的提问来源于stack exchange,提问作者stkvtflw
相关产品推荐
相关产品推荐

