youtube-dl配置no_check_certificate仍报SSL证书验证失败错误
youtube-dl 代码调用时SSL证书验证失败解决方案
问题表现
- 终端执行命令
youtube-dl --no-check-certificate https://youtu.be/PsO6ZnUZI0g可正常完成视频下载 - 代码中调用youtube-dl时,已添加配置项
'no_check_certificate': True,执行ydl.download(['https://youtu.be/PsO6ZnUZI0g'])时抛出如下错误:
Unable to download webpage: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)>
可行解决方法
检查参数传递逻辑是否正确
多数场景下是配置参数传入位置错误导致no_check_certificate未生效,正确写法是将配置项传入YoutubeDL构造方法,不要传入download方法:import youtube_dl ydl_opts = { 'no_check_certificate': True, # 其余自定义配置 } with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download(['https://youtu.be/PsO6ZnUZI0g'])全局跳过Python SSL证书校验
如果参数位置正确依然报错,可在代码最开头(导入youtube_dl之前)添加如下代码,直接关闭Python全局HTTPS证书校验,效果和终端加--no-check-certificate参数完全一致:import ssl ssl._create_default_https_context = ssl._create_unverified_context修复本地证书库
不想全局关闭证书校验的场景,可以直接修复本地Python环境的证书信任链:- Mac系统自带Python环境:执行对应版本路径下的证书安装脚本,路径格式为
/Applications/Python 3.x/Install Certificates.command,将3.x替换为本地实际Python版本号 - Conda虚拟环境:执行
conda install ca-certificates certifi更新证书依赖 - 原生pip环境:执行
pip install --upgrade certifi升级证书包,操作完成后重启Python进程即可
- Mac系统自带Python环境:执行对应版本路径下的证书安装脚本,路径格式为
替换为维护活跃的yt-dlp分支
原版youtube-dl已长期停止更新,大量参数逻辑、站点适配存在已知bug,yt-dlp是其兼容的活跃维护分支,参数完全对齐原版,替换成本极低:- 执行
pip uninstall youtube-dl && pip install yt-dlp完成安装替换 - 将代码中导入语句从
import youtube_dl修改为import yt_dlp as youtube_dl,其余业务代码不需要改动即可正常运行
- 执行
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

