Python requests配置HTTP代理仍泄露真实IP 换HTTPS代理报连接错误如何解决
问题根源
- 代理配置规则不匹配:requests的
proxies参数是按目标请求的协议匹配代理规则的,你请求的目标是HTTPS协议,但仅配置了http协议的代理规则,requests匹配不到对应规则就会直接直连目标站点,导致真实IP泄露。 - HTTPS代理配置错误:你直接将代理前缀改为
https://后报错,大概率是你的代理本身是HTTP类型代理,不支持HTTPS协议接入代理节点,所以会出现连接超时错误。
解决步骤
1. 修正代理配置结构
普通HTTP代理本身就支持通过CONNECT隧道转发HTTPS请求,无需修改代理前缀,只需要在proxies字典中同时配置http和https两个规则即可,修改后的proxies方法如下:
def proxies(self): self.randomProxy = random.choice(self.proxyList) return { "http": f"http://{self.randomProxy}", "https": f"http://{self.randomProxy}" }
修改后再次测试,即可看到请求已经走代理转发,不会泄露真实IP。
2. 若确实使用HTTPS代理的处理方案
如果你的代理服务商明确要求使用HTTPS协议接入代理节点,请按以下方式调整:
- 确认代理地址的端口为HTTPS代理专属端口,代理前缀改为
https:// - 若代理使用自签名SSL证书,需要在请求时添加
verify=False参数忽略证书校验,或指定证书路径:
r = requests.get('https://api.shitchell.com/headers', proxies=proxy, verify=False, timeout=10)
注意:忽略证书校验会有安全风险,仅建议测试环境使用
3. 额外校验项
- 确认你使用的代理为高匿代理:透明代理和普通匿名代理仍会在请求头中携带你的真实IP,只有高匿代理不会泄露原始请求IP。
- 可添加超时参数避免请求长时间挂死,代理可用性较差的情况下可添加重试逻辑提升成功率。
修改后完整可运行代码
import random import requests import urllib3 # 忽略verify=False带来的告警 urllib3.disable_warnings() class main(): with open('external/proxies.txt', 'r') as proxyFile: proxyList = [proxyIp.strip() for line in proxyFile.readlines() for proxyIp in line.split(',') if proxyIp] def proxies(self): self.randomProxy = random.choice(self.proxyList) return { "http": f"http://{self.randomProxy}", "https": f"http://{self.randomProxy}" # 如果是HTTPS代理则替换为下面的配置 # "http": f"https://{self.randomProxy}", # "https": f"https://{self.randomProxy}" } def req(self): proxy = self.proxies() r = requests.get( 'https://api.shitchell.com/headers', proxies=proxy, timeout=10, # HTTPS代理若报证书错误可加下面的参数 # verify=False ) print('prox: ', proxy) print('resp: ', r.text) if __name__ == "__main__": main().req()
内容的提问来源于stack exchange,提问作者user16246484
相关产品推荐
相关产品推荐

