You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

urllib.request.urlopen()访问特定网站失败:SSL证书验证错误求助

解决Python urllib SSL证书验证失败问题

我遇到过类似的问题,这个SSL证书验证失败通常是因为目标网站的SSL证书没有被你的Python环境信任,或者本地的CA证书库过时了。下面给你几个可行的解决方案,从临时测试到生产环境安全方案都有:

1. 临时跳过SSL验证(仅用于测试,不推荐生产环境)

如果只是临时测试需求,可以创建一个不验证证书的SSL上下文,快速绕过这个错误。但要注意,这种方式会让你的请求暴露在中间人攻击的风险下,绝对不能用于生产环境:

import urllib.request
import json
import ssl

# 创建未验证的SSL上下文
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# 使用这个上下文发起请求
with urllib.request.urlopen('https://bookit.modo.coop/api/v2/car_list', context=ctx) as response:
    data = json.loads(response.read().decode())

2. 使用certifi库更新CA证书(推荐生产环境)

更安全的做法是确保你的Python环境能信任目标网站的证书。certifi是一个维护根CA证书的第三方库,它会定期更新可信证书列表,能解决大多数证书信任问题:

首先安装certifi:

pip install certifi

然后修改代码,使用certifi提供的CA证书:

import urllib.request
import json
import ssl
import certifi

# 使用certifi的CA证书创建上下文
ctx = ssl.create_default_context(cafile=certifi.where())

with urllib.request.urlopen('https://bookit.modo.coop/api/v2/car_list', context=ctx) as response:
    data = json.loads(response.read().decode())

3. 手动指定目标网站的证书

如果上述方法都不行,可能是目标网站的证书链不完整。你可以手动从浏览器导出该网站的证书,保存为.pem格式,然后在代码中指定这个证书文件:

import urllib.request
import json
import ssl

# 替换成你导出的证书文件路径
ctx = ssl.create_default_context(cafile='/path/to/your/downloaded/certificate.pem')

with urllib.request.urlopen('https://bookit.modo.coop/api/v2/car_list', context=ctx) as response:
    data = json.loads(response.read().decode())

怎么导出证书?

以Chrome为例:

  1. 访问目标URL,点击地址栏的锁图标
  2. 选择「证书」>「详细信息」>「复制到文件」
  3. 按照向导选择Base64编码的X.509格式,保存为.pem文件

内容的提问来源于stack exchange,提问作者Amir H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:03