调用api.covid19api.com接口报SSL证书已过期错误该如何解决
问题原因
你遇到的SSLCertVerificationError报错核心原因是api.covid19api.com的站点SSL证书已过期,Python默认发起HTTPS请求时会强制校验服务端证书有效性,校验失败就会抛出该异常。
解决方案
方案1:临时关闭SSL校验(仅推荐测试场景使用,生产环境不建议)
在原有代码基础上新增SSL上下文配置,跳过证书校验,修改后代码如下:
import http.client import json import pandas as pd import ssl # 创建不校验SSL证书的上下文 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE conn = http.client.HTTPSConnection("api.covid19api.com", context=ctx) payload = '' headers = {} conn.request("GET", "/countries", payload, headers) res = conn.getresponse() data = res.read().decode('UTF-8') existingCountries = json.loads(data) dfC=pd.DataFrame(existingCountries) dfC.head()
方案2:使用requests库实现(写法更简洁)
如果使用requests库发起请求,只需添加verify=False参数即可跳过校验:
import requests import pandas as pd response = requests.get("https://api.covid19api.com/countries", verify=False) existingCountries = response.json() dfC=pd.DataFrame(existingCountries) dfC.head()
注意:运行时可能会出现不安全请求的警告,不影响正常获取数据
方案3:生产环境合规解决方案
如果是生产环境不允许关闭证书校验,可选择以下两种方式:
- 等待
api.covid19api.com站点运营方更新有效SSL证书 - 手动将该站点的证书导入到本地Python环境的信任证书列表中,完成后即可正常校验通过
内容的提问来源于stack exchange,提问作者Rainer
相关产品推荐
相关产品推荐

