Python Requests模块使用时出现SSL或代理错误问题求解
解决方案
核心问题定位
你遇到的报错本质是两个配置错误:
- 代理地址格式配置错误
- 未信任公司代理的中间人SSL根证书
步骤1:修正代理配置
绝大多数企业级HTTPS代理的监听端口为HTTP协议,你之前将HTTPS代理地址前缀写为https属于典型错误,会直接导致SSL握手失败,修正后的配置如下:
# HTTPS代理的地址前缀必须为http,而非https https_proxy = "http://server.mycompany.net:9480" http_proxy = "http://server.mycompany.net:9480" proxyDict = { "https": https_proxy, "http": http_proxy }
步骤2:导出并配置代理根证书
公司代理会对所有HTTPS请求做审计,自动替换请求的SSL证书,因此需要手动信任代理的根证书:
- 用Chrome/Edge打开目标接口域名
https://mycompany.com - 点击地址栏左侧锁形图标 → 「证书」→ 「证书路径」→ 选中最顶层根证书 → 「查看证书」→ 「详细信息」→ 「复制到文件」
- 导出格式选择
Base64编码的X.509(.CER),保存为proxy_root.cer放在项目根目录
步骤3:编写正确的请求代码
无需传入自签名客户端证书,将verify参数指向导出的根证书路径即可:
api_url = constants.ERV_API_URL_ME headers = { "Content-Type": "application/json", "Accept": "application/json", "Authorization": "LONG_SESSION_ID_HERE" } response = requests.get( api_url, headers=headers, verify="./proxy_root.cer", proxies=proxyDict ) print(response.json())
临时测试方案(不建议生产环境使用)
如果暂时不需要校验证书,可以关闭SSL警告后设置verify=False:
import urllib3 # 关闭不安全SSL请求的警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) response = requests.get( api_url, headers=headers, verify=False, proxies=proxyDict )
内容的提问来源于stack exchange,提问作者smackenzie
相关产品推荐
相关产品推荐

