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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:31