Python编写接口遇到证书验证错误,解决办法

今天准备把这几天编写的py接口,部署到服务器上,部署成功后,去请求返回服务不可用,返回宝塔查看一下项目日志,报错:[SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1002)')]
也就是证书验证错误哦,之前一直是在请求的时候使用verify=False去屏蔽证书验证,但是本地测试开发环境可以这样去做,用于项目上线就不太行了。
经过九九八十一次百度,也是成功解决了这个问题。(因为我使用的是aiohttp异步请求,所以这里的方案适用其他请求暂时未知)

解决办法

# 1. 导入ssl
import ssl
# 2. 配置ssl上下文管理
ssl_context = ssl.create_default_context()
ssl_context.load_verify_locations(cafile=certifi.where())  # 使用certifi的证书
ssl_context.check_hostname = True
ssl_context.verify_mode = ssl.CERT_REQUIRED
# 3. 安装并导入certifi
# pip install certifi
import certifi
# 4. 在每个异步请求方法,添加SSL上下文
async def rx_fetch_post(url, params, uid=''):
    # ... 省略其他代码
    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(url, headers=headers, data=params, ssl=ssl_context) as response:  # 添加ssl上下文参数
                # ... 省略其他代码
        # ... 省略其他代码
# 5. 重启服务器项目,请求成功
# {
# 	"code": 200,
# 	"msg": "获取成功",
# 	"data": {
# 		"list": [
# 			{
# 				"code": "108993592520250225001",
# 				"name": "小杰不吃了*",
# 				"time": "2025-02-25 16:13",
# 				"totalNum": 1
# 			}
# 		]
# 	}
# }