使用cif库访问OECD接口出现SSLCertVerificationError如何解决
错误根因
该报错为请求stats.oecd.org站点时SSL证书验证失败导致,通常触发原因有三个:
- 站点近期更新了SSL证书,本地根证书信任列表未同步新的证书签发机构信息
- Python依赖的证书管理包
certifi版本过旧,内置的根证书列表未覆盖站点新证书的签发机构 - 部分MacOS环境下的Python版本未默认安装系统根证书
修复方案
按优先级从高到低执行即可:
方案1:更新证书依赖(最安全,无安全风险)
- 首先升级
certifi包(requests库默认使用的证书管理依赖):pip install --upgrade certifi - 如果你使用的是MacOS系统的Python环境,额外执行对应Python版本的证书安装脚本:
/Applications/Python\ 3.x/Install\ Certificates.command
将命令中的3.x替换为你本地使用的Python版本号,例如3.10。
方案2:临时关闭SSL校验(仅应急使用,不推荐长期开启)
如果方案1执行后仍报错,可以临时关闭SSL证书校验,修改代码如下:
首先在代码开头添加禁用SSL警告的配置:
import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
再修改createDataFrameFromOECD调用参数,添加verify=False:
data, subjects, measures = cif.createDataFrameFromOECD( countries=countries, dsname=dsname, measure=measure, frequency=frequency, startDate=startDate, endDate=endDate, verify=False )
方案3:手动指定证书路径
如果不想关闭SSL校验,可手动导出stats.oecd.org站点的根证书存储到本地,调用时指定证书路径即可:
data, subjects, measures = cif.createDataFrameFromOECD( countries=countries, dsname=dsname, measure=measure, frequency=frequency, startDate=startDate, endDate=endDate, verify='/本地保存的根证书路径.pem' )
内容的提问来源于stack exchange,提问作者Mark M
相关产品推荐
相关产品推荐

