Python发送GET请求遇SSL版本错误及代理问题求助
解决Python requests通过HTTP代理访问HTTPS站点的SSL版本错误问题
问题根源
你的代理仅支持HTTP协议,但Python的requests库默认会对HTTPS目标站点使用HTTPS协议连接代理,导致协议不匹配,触发[SSL: WRONG_VERSION_NUMBER]错误。而Postman和Golang会自动通过HTTP代理建立CONNECT隧道来转发HTTPS流量,因此能正常请求。verify=False是用于跳过SSL证书验证的,和当前代理协议不匹配的问题无关,所以无效。
解决方案
1. 显式配置代理参数
不管目标站点是HTTPS,代理地址必须使用HTTP协议格式,同时在proxies字典中为http和https都指定这个HTTP代理。这样requests会通过HTTP代理建立CONNECT隧道,安全转发HTTPS流量。
2. 修改后的完整代码
import requests url = "https://stat.gov.kz/important/classifier" payload = {} headers = { 'Content-Type': 'application/json; charset=utf-8', 'Cookie': 'cookiesession1=678B774D30541450DAF79D7FA70C889F' } # 替换为你的实际HTTP代理地址和端口 proxies = { 'http': 'http://your-proxy-ip:proxy-port', 'https': 'http://your-proxy-ip:proxy-port' } # 若代理需要认证,格式为 http://username:password@proxy-ip:port # proxies = { # 'http': 'http://user:pass@your-proxy-ip:proxy-port', # 'https': 'http://user:pass@your-proxy-ip:proxy-port' # } response = requests.request("GET", url, headers=headers, data=payload, proxies=proxies) print(response.text)
3. 额外注意事项
- 若系统环境变量中设置了
HTTP_PROXY或HTTPS_PROXY,可能会和代码中的代理配置冲突,可通过以下代码临时清除:import os os.environ.pop('HTTP_PROXY', None) os.environ.pop('HTTPS_PROXY', None)
内容的提问来源于stack exchange,提问作者user18604394
相关产品推荐
相关产品推荐

