yt-dlpでbilibiliがエラー「HTTP Error 567: Unknown Status」の対処法

yt-dlp コンピュータ関連
スポンサーリンク

手短に。

今度は HTTP Error 567: Unknown Status というエラーに遭遇。

-F オプションでフォーマットリストは取得できるものの、

[info] Available formats for BV1xxxxxxxx:
ID    EXT RESOLUTION FPS │  FILESIZE  TBR PROTO │ VCODEC         VBR ACODEC     ABR
───────────────────────────────────────────────────────────────────────────────────
30216 m4a audio only     │ ≈13.66MiB  63k https │ audio only         mp4a.40.2  63k
30016 mp4 640x360     29 │ ≈53.66MiB 248k https │ avc1.640033   248k video only
30011 mp4 640x360     29 │ ≈26.70MiB 123k https │ hvc1.1.6.L120 123k video only

実際にDLしようとすると表題のエラーが発生。

[info] BV1xxxxxxxx: Downloading 1 format(s): 30011
[download] Got error: HTTP Error 567: Unknown Status

不思議と映像のみで、音声は問題なく転送される。

スポンサーリンク

HTTP Error 567 の対処法

自分は初めて遭遇しましたが、以前からGitHubの方には報告があったようです。

upos-sz-mirrorcosov.bilivideo.com

だと問題が起きると言われていました。
実際に確認してみると同じサーバーでした。でも他のサーバーで発生しないかは未確認。

(参考url: [bilibili] Downloading fails with HTTP status 567 #17847 )

違うCDNサーバーに行き着くまでひたすら繰り返す方法もあるようですが、ランダムだしまぁ面倒くさいよね。

てことで紹介されていた Rangeヘッダー を付与する方法で対処します。

--add-headers "Range:bytes=0-"を追加

yt-dlp --add-headers "Range:bytes=0-" https://www.bilibili.com/ja/video/BV1xxxxxxxx/

これで問題なくDLされました。

Range ヘッダーとは?

HTTP の Range は、サーバーに対して「データのどの範囲を取得したいか」を指定する仕組みです。

Range: bytes=0-

これは、

  • bytes=0:先頭の0バイト目から
  • -:末尾まで

つまり、ファイルの先頭から最後までを対象にする範囲指定です。

ただなぜこれで通るようになるのかは不明。うん、わからん。

まとめ

いろんなエラーが日々出てきますね。
それだけセキュリティ更新をし続けているんだろうね。

参考にした GitHub Issue では、Tencentのセキュリティポリシーによるアクセス拒否が報告されています。
CDNのセキュリティ強化によってyt-dlpの従来のアクセス方法が弾かれるようになった可能性が高い。

とりあえずこのエラーに遭遇したら Rangeヘッダー をつけて凌ぎましょう。

では。

コメント

タイトルとURLをコピーしました