手短に。
今度は 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ヘッダー をつけて凌ぎましょう。
では。

コメント