Python调用API报CERTIFICATE VERIFY FAILED证书过期错误如何解决
问题原因
- 报错明确指向SSL证书验证失败,核心原因是目标API站点
v1.basketball.api-sports.io的SSL证书近期过期,或是站点更新证书后证书链配置不完整。 - 你之前安装系统级证书未生效,是因为Anaconda环境下的Python默认使用自带的CA证书包,不读取系统证书库,所以系统证书更新无法同步到Python环境。
解决方案
方案1:更新Python环境CA证书(最推荐,无安全风险)
如果你使用conda虚拟环境,激活对应环境后执行命令:
conda update ca-certificates
如果使用pip管理依赖,执行命令:pip install --upgrade certifi
升级完成后重新运行代码即可。方案2:临时跳过证书验证(仅推荐测试使用,生产环境禁止使用)
手动创建不校验证书的SSL上下文传入HTTPSConnection,修改后代码如下:
import http.client import ssl # 构造跳过证书验证的上下文 context = ssl._create_unverified_context() conn = http.client.HTTPSConnection("v1.basketball.api-sports.io", context=context) headers = { 'x-rapidapi-host': "v1.basketball.api-sports.io", 'x-rapidapi-key': "XxXxXxXxXxXxXxXxXxXxXxXx" } conn.request("GET", "/games?date=2019-11-23", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))方案3:手动指定合法证书
如果你确认目标站点证书合法,可手动导出站点的有效SSL证书,在代码中指定证书路径验证:
import http.client import ssl # 替换为你本地保存的证书文件路径 context = ssl.create_default_context(cafile="./api_sports_io.crt") conn = http.client.HTTPSConnection("v1.basketball.api-sports.io", context=context)
内容的提问来源于stack exchange,提问作者Boröom
相关产品推荐
相关产品推荐

