下载时,HEAD 404异常
bilix 版本

下载命令
bilix s https://www.bilibili.com/video/BV1kt411k7A3 --dir E:\tmp --max-con 20
问题描述
重复执行上述命令总是报下方相同的异常,无法定位是某一p的地址404或者是某个分片404。也无法知道是不是我本地的网络导致的问题。
异常信息
Traceback (most recent call last):
File "c:\python38\lib\runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "c:\python38\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "c:\users\showt\.local\bin\bilix.exe\__main__.py", line 7, in <module>
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1130, in __call__
return self.main(*args, **kwargs)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\_cli.py", line 268, in main
loop.run_until_complete(task)
File "c:\python38\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 371, in get_series
await asyncio.gather(*cors)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 441, in get_video
await asyncio.gather(*cors)
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 577, in _get_media
res = await self._req(media_urls[0], method='HEAD')
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 545, in _req
res.raise_for_status()
File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\httpx\_models.py", line 1510, in raise_for_status
raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: Client error '404 Not Found' for url 'https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/16/18/76821816/76821816-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1653679938&gen=playurlv2&os=cosbv&oi=1885228412&trid=fd2cf300307c48e6aa28300fe24ec4d6u&platform=pc&upsig=ec230dd69a0462df746fde23b8ef006e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=139942&logo=80000000'
For more information check: https://httpstatuses.com/404
在我本机未能复现。可能是网络原因导致的,这个错误的意思是向某一p的画面或者音频链接发起HEAD请求时服务器返回404状态,这个很奇怪🤔。至于如果再次访问这个报404的链接返回的是403错误,这个是可预料的,因为后端链接过一段时间就会失效。
关于定位,可以使用--max-con 1来一个个下载看谁报错。
隔了一天再下载又没问题了😅
我今天也遇到这个问题,在向服务器发起HEAD请求后报404,但是使用GET则返回正常,可能是b站服务端的问题
版本0.6.11对该问题进行了处理,但问题仍然存在
我目前提交了一个新的版本对此问题进行了处理,但是还未经过测试(暂时没遇上),所以暂时未在pypi上发布
我目前提交了一个新的版本对此问题进行了处理,但是还未经过测试(暂时没遇上),所以暂时未在pypi上发布
@HFrost0 ,我pull了你的代码进行尝试,下载了两部视频,其中:这一部完全没有任何异常。
下载另外一部时 404HEAD异常出错。出错日志:
(Lighting-bilibili-download) liy@LEE-PC:~/Lighting-bilibili-download$ bilix s https://www.bilibili.com/video/BV16S4y1p7Dg --dir /mnt/e/tmp --max-con 10 --subtitle
警告:状态码异常404 HEAD https://upos-sz-estgoss.bilivideo.com/upgcxcode/47/66/760196647/760196647-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03e
N0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1657796530&gen=playurlv2&os=upos&oi=1885228211&trid=49989deb523e4e8db37502
5a261ed1ccu&mid=0&platform=pc&upsig=3ba5c8c88b0d4ac24ff1a8692855647b&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,1&agrr=1&bw=30547&logo=80000000
警告:状态码异常404 HEAD https://upos-sz-estgoss.bilivideo.com/upgcxcode/47/66/760196647/760196647-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03e
N0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1657796530&gen=playurlv2&os=upos&oi=1885228211&trid=49989deb523e4e8db37502
5a261ed1ccu&mid=0&platform=pc&upsig=3ba5c8c88b0d4ac24ff1a8692855647b&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,1&agrr=1&bw=30547&logo=80000000
【Udemy Tailwind CSS 热门课程】Tailwind CSS From Scratch Learn By Building Projects-P9-003 Container & Spacing-中文(简体).srt 完成
【Udemy Tailwind CSS 热门课程】Tailwind CSS From Scratch Learn By Building Projects-P9-003 Container & Spacing-中文(自动翻译).srt 完成
【Udemy Tailwind CSS 热门课程】Tailwind CSS From Scratch Learn By Building Projects-P1-001 Introduction【01 - Introduction】-中文(简体).srt 完成
【Udemy Tailwind CSS 热门课程】Tailwind CSS From Scratch Learn By Building Projects-P3-004 What Is Tailwind CSS-中文(简体).srt 完成
警告:状态码异常404 HEAD https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/71/85/760198571/760198571-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N0
3eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1657796530&gen=playurlv2&os=cosbv&oi=1885228211&trid=83160320a4064890b79
17724d134c287u&mid=0&platform=pc&upsig=fc53638988da7169f5b3a390cddbad11&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=8055&logo=80000000
【Udemy Tailwind CSS 热门课程】Tailwind CSS From Scratch Learn By Building Projects-P3-004 What Is Tailwind CSS-中文(自动翻译).srt 完成
.........................省略........................
Traceback (most recent call last):
File "/home/liy/.local/share/virtualenvs/Lighting-bilibili-download-C-ivWGZB/bin/bilix", line 33, in <module>
sys.exit(load_entry_point('bilix', 'console_scripts', 'bilix')())
File "/home/liy/.local/share/virtualenvs/Lighting-bilibili-download-C-ivWGZB/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
return self.main(*args, **kwargs)
File "/home/liy/.local/share/virtualenvs/Lighting-bilibili-download-C-ivWGZB/lib/python3.9/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/home/liy/.local/share/virtualenvs/Lighting-bilibili-download-C-ivWGZB/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/liy/.local/share/virtualenvs/Lighting-bilibili-download-C-ivWGZB/lib/python3.9/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/home/liy/Lighting-bilibili-download/bilix/_cli.py", line 268, in main
loop.run_until_complete(task)
File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
return future.result()
File "/home/liy/Lighting-bilibili-download/bilix/download.py", line 381, in get_series
await asyncio.gather(*cors)
File "/home/liy/Lighting-bilibili-download/bilix/download.py", line 452, in get_video
await asyncio.gather(*cors)
File "/home/liy/Lighting-bilibili-download/bilix/download.py", line 609, in _get_media
await asyncio.gather(*cors)
File "/home/liy/Lighting-bilibili-download/bilix/download.py", line 630, in _get_media_part
start, end = map(int, part_name.split('-')[-2:])
ValueError: invalid literal for int() with base 10: ''
感谢,我复现了这个错误,现在正在debug
问题的原因是改用的GET请求返回的数据中total所在的位置发生了变化,目前版本已经处理,如果没问题可以发布新版本了。总结一下,对于这个问题的解决,主要通过
- 错误发生时尝试向备选服务器发起请求
- 2次失败后(通常由于没有备选服务器导致)改为GET请求
还是有问题,如图:

HEAD 404 异常之后,换成 GET,结果GET也404了。 这部视频好奇怪啊,下载其他的都没碰到这个问题。
我觉得要不然这问题还是放着吧,好像也不是大面积出现。 没必要针对啊B服务器的非标准化抽风一直做适配。。。。😅
又优化了一次重试逻辑,现在应该很难发生这个问题了