Mac系统PyCharm中Python的request.urlretrieve报证书验证失败如何解决
解决方案
方案1:临时禁用SSL验证(仅测试环境使用,生产环境不推荐)
直接为urlretrieve传入不校验证书的SSL上下文即可绕开报错,修改代码如下:
import ssl import json from urllib import request import requests def douyu(page=1): # 补充你代码里缺失的接口请求步骤 url = "https://www.douyu.com/gapi/rknc/directory/yzRec/{page}" res = requests.get(url.format(page=page)) dic = json.loads(res.text) meizi_list = dic['data']['rl'] # 创建无验证的SSL上下文 context = ssl._create_unverified_context() for meizi in meizi_list: nn = meizi['nn'] rs1 = meizi['rs1'] # 调用时传入context参数 request.urlretrieve(rs1, f"{nn}.png", context=context) print(nn, "work done") douyu(1)
如果嫌每个调用都传参数麻烦,也可以在代码开头加一行全局配置:
ssl._create_default_https_context = ssl._create_unverified_context
方案2:修复Python根证书配置(永久生效,推荐)
Mac系统下Python3.6及以上版本默认不读取系统根证书,大部分证书安装操作没有命中Python的专属证书路径,按你的安装方式选择对应操作:
- 官网安装的Python:打开Finder进入
/Applications/Python 3.x(3.x替换为你实际使用的版本号,比如3.11),双击运行目录内的Install Certificates.command脚本即可完成证书更新。 - pyenv管理的Python:执行以下命令配置:
# 升级证书库 pip install --upgrade certifi # 临时生效 export SSL_CERT_FILE=$(python -m certifi) # 永久生效:把上面的export命令写入~/.zshrc(或~/.bash_profile),执行source ~/.zshrc即可
方案3:改用requests库下载文件(适配成本最低)
你代码中已经导入了requests库,它的证书配置更灵活,直接替换urlretrieve逻辑即可:
for meizi in meizi_list: nn = meizi['nn'] rs1 = meizi['rs1'] # 证书正常时用默认配置即可,不需要验证的话加verify=False参数 resp = requests.get(rs1) with open(f"{nn}.png", "wb") as f: f.write(resp.content) print(nn, "work done")
内容的提问来源于stack exchange,提问作者biao zhu
相关产品推荐
相关产品推荐

