在PythonAnywhere部署含Pafy的Flask应用时遇403错误求助
Flask+Pafy部署PythonAnywhere出现403错误的解决办法
问题复现
本地Flask应用使用Pafy模块完全正常,但部署到PythonAnywhere后触发403 Forbidden隧道连接错误,删除backend_youtube_dl中差评计数代码后仍未解决,核心报错:
youtube_dl.utils.DownloadError: ERROR: Unable to download API page: <urlopen error Tunnel connection failed: 403 Forbidden> (caused by URLError(OSError('Tunnel connection failed: 403 Forbidden')))
解决方案
1. 替换youtube-dl为yt-dlp
youtube-dl已停止维护,PythonAnywhere环境中旧版本的youtube-dl易被YouTube反爬机制拦截,改用活跃维护的yt-dlp:
- 安装yt-dlp:
pip install yt-dlp --user - 在Flask代码中指定Pafy使用yt-dlp后端:
import pafy # 强制切换后端为yt-dlp pafy.set_backend("yt-dlp")
2. 配置请求头模拟浏览器
YouTube会拦截非浏览器标识的请求,给yt-dlp添加浏览器UA:
from yt_dlp import YoutubeDL import pafy # 配置yt-dlp参数 ydl_opts = { 'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'quiet': True # 关闭冗余日志 } # 初始化自定义ydl实例 with YoutubeDL(ydl_opts) as ydl: # 用自定义ydl创建Pafy视频对象 video = pafy.new("你的视频ID", ydl=ydl) # 后续操作比如获取流 best_video = video.getbest()
3. 更新Pafy到兼容yt-dlp的版本
官方Pafy稳定版可能对yt-dlp支持不足,安装开发版:
pip install git+https://github.com/mps-youtube/pafy.git --user
4. 避免调用敏感接口
尽量减少对YouTube评论、点赞等非核心接口的调用,仅保留视频流获取等必要功能,降低被拦截概率。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

