解决 Python requests SSL 证书验证问题的三种方法
1. 临时禁用 SSL 验证(不推荐生产环境使用)
在开发或测试环境中,可临时禁用 SSL 验证以绕过错误,但会降低安全性,可能面临中间人攻击风险。
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 禁用警告
url = 'https://v2.alapi.cn/api/zaobao'
params = {'token': '57wYlmH4OS8PArNx', 'format': 'json'}
response = requests.get(url, params=params, verify=False) # 关键参数:verify=False
2. 手动信任自签名证书(推荐)
如果服务器使用的是自签名证书,可将证书下载后手动加入信任链。
步骤:
- 从浏览器导出证书(例如 Chrome 访问 https://v2.alapi.cn,点击地址栏锁图标,导出为 PEM 格式)。
-
在代码中指定该证书文件的路径:
response = requests.get(url, params=params, verify='/path/to/certificate.pem')或通过环境变量全局设置证书路径:
import os os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/certificate.pem'
3. 更新证书库
Python 的 requests 库依赖 certifi 包管理 CA 证书。更新证书库可能解决问题。
pip install --upgrade certifi
更新后,可查看当前使用的证书路径:
import certifi
print(certifi.where()) # 输出证书路径