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

使用urllib请求网站时遭遇SSL: CERTIFICATE_VERIFY_FAILED错误求助

解决urllib访问HTTPS网站的证书验证问题

嘿,我来帮你搞定这个证书验证的麻烦!你的代码逻辑本身没问题,问题出在urllib默认会严格验证SSL证书——当你的环境里缺少对应的根证书,或者网络环境(比如代理)干扰了证书验证流程时,就会触发这个错误。下面给你几个可行的解决方案:

方案1:临时跳过证书验证(仅调试用)

如果你只是临时调试,不想纠结证书细节,可以创建一个不验证证书的SSL上下文。注意:这个方法绝对不要用在生产环境,会让你的请求暴露在中间人攻击的风险下。

修改后的代码如下:

import bs4 as bs
import urllib.request
import ssl

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

sauce = urllib.request.urlopen('https://stackoverflow.com/', context=ctx).read()
soup = bs.BeautifulSoup(sauce, 'lxml')
for s in soup.find_all('a'):
    print(s.string)

方案2:修复系统根证书(推荐生产环境)

如果是因为系统缺少必要的根证书导致验证失败,你可以安装系统的根证书包:

  • 在Ubuntu/Debian系统:
    sudo apt-get update && sudo apt-get install ca-certificates
    
  • 在Windows/macOS:直接更新系统到最新版本,系统会自动同步根证书;或者手动导入缺失的目标网站根证书。

修复后,你的原始代码就能正常运行了。

方案3:改用requests库(更简洁省心)

urllib属于底层库,处理证书问题不够友好。推荐你使用requests库,它默认会自动处理证书验证,代码更简洁易读:

首先安装requests(如果没装的话):

pip install requests

然后修改代码:

import bs4 as bs
import requests

response = requests.get('https://stackoverflow.com/')
soup = bs.BeautifulSoup(response.text, 'lxml')
for s in soup.find_all('a'):
    print(s.string)

这个方法几乎不会遇到证书问题,除非你访问的是使用自签名证书的私有网站,那时只需要额外加verify=False参数(同样注意生产环境风险)。

内容的提问来源于stack exchange,提问作者Jana Ruhrländer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:39