Skip to content

fix(bilibili): 注入 dm_img 风控参数修复 wbi/playurl 412 错误#399

Draft
Copilot wants to merge 2 commits into
masterfrom
copilot/fix-bilibili-412-error
Draft

fix(bilibili): 注入 dm_img 风控参数修复 wbi/playurl 412 错误#399
Copilot wants to merge 2 commits into
masterfrom
copilot/fix-bilibili-412-error

Conversation

Copilot AI commented Jun 11, 2026

Copy link
Copy Markdown

改动概述

在 yt-dlp 的 BilibiliBaseIE._download_playinfo 上打 monkey-patch,注入 B 站 wbi/playurl 网关新要求的 dm_img_* 风控参数,消除 HTTP 412 错误。

为什么

B 站 wbi/playurl 网关新增了 dm_img_list / dm_img_str / dm_cover_img_str / dm_img_inter + web_location 参数校验,缺失时一律返回 412。yt-dlp 2025.3.31 的 _download_playinfo 不带这些参数,导致网页未内嵌 playinfo 的视频(必须走 API)全部下载失败。

做了什么

backend/app/downloaders/bilibili_downloader.py

  • 新增 _patch_bilibili_extractor(),在模块加载时 wrap BilibiliBaseIE._download_playinfo,向每次 wbi 签名请求前注入随机化的 dummy 风控指纹:
extra = {
    'web_location': 1550101,
    'dm_img_list': '[]',
    'dm_img_str': base64.b64encode(
        ''.join(random.choices(string.printable, k=random.randint(16, 64))).encode()
    )[:-2].decode(),
    'dm_cover_img_str': base64.b64encode(
        ''.join(random.choices(string.printable, k=random.randint(32, 128))).encode()
    )[:-2].decode(),
    'dm_img_inter': '{"ds":[],"wh":[6093,6631,31],"of":[430,760,380]}',
}

参数格式(string.printable + [:-2] base64 截断)与 yt-dlp 自身在 BiliBiliSpaceIE 频道搜索端点的实现完全一致。

  • _bili_dm_patched flag 保证幂等,多次 import / 重载不会链式叠加 wrapper。
  • 调用方传入的 query 参数优先级高于 dummy 值,不破坏现有扩展点。

测试方式

  • pnpm typecheck && pnpm build(前端 / 插件)通过
  • python -m py_compile backend/app/downloaders/bilibili_downloader.py 通过
  • 手动验证步骤:
    使用网页未内嵌 playinfo 的 B 站视频(如 BV1X9L16oEgB)配合有效 Cookie 生成笔记,确认不再返回 412。

回归风险

仅影响 Bilibili 下载链路。patch 在模块级别全局生效,适用于所有经过 BilibiliBaseIE._download_playinfo 的调用(音频下载、视频下载、字幕 yt-dlp fallback 路径)。无需前后端同步部署,无配置变更。

Checklist

  • 分支命名遵循 CONTRIBUTING.md §3feature/* / fix/* / release/* / hotfix/*
  • base 分支正确(常规改动 → develop;线上紧急 → master;发版 → 见 §4.3)
  • Commit message 遵循 type(scope): subject 格式(CONTRIBUTING.md §5.1
  • 已自测核心流程
  • 已更新相关文档(README.md / CHANGELOG.md / CLAUDE.md / 模块 README,如适用)
  • 未夹带 secrets / .env / 大型二进制
  • 单 PR 不跨多个工作区做无关改动

Copilot AI linked an issue Jun 11, 2026 that may be closed by this pull request
2 tasks
Copilot AI changed the title [WIP] Fix Bilibili note generation 412 error fix(bilibili): 注入 dm_img 风控参数修复 wbi/playurl 412 错误 Jun 11, 2026
Copilot AI requested a review from JefferyHcool June 11, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bilibili 生成笔记问题 412 ERROR

2 participants