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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:04