HFrost0 / bilix

⚡️Lightning-fast async download tool for bilibili and more
Apache License 2.0
1.64k stars 168 forks source link

ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635) #9

Closed showthesunli closed 2 years ago

showthesunli commented 2 years ago

使用get_series 下载的时候经常会报这个错误,调低并发数也会报同样的错误。 使用get_video下载报错的单个视频时,没有再报错。 下载命令如下,不不知道能不能复现: bilix s https://www.bilibili.com/video/BV1hS4y1m7Ma --dir /mnt/e/tmp --subtitle --max-con 20

异常信息如下:


Traceback (most recent call last):
  File "/home/liy/.local/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 249, in main
    asyncio.run(download(**kwargs))
  File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 135, in download
    await d.get_series(key, quality=quality,
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 287, in get_series
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 360, in get_video
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 492, in _get_media
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 512, in _get_media_part
    async for chunk in r.aiter_bytes():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1680, in aiter_bytes
    async for raw_bytes in self.aiter_raw():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1734, in aiter_raw
    async for raw_stream_bytes in self.stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_client.py", line 145, in __aiter__
    async for chunk in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_transports/default.py", line 239, in
__aiter__
    async for part in self._httpcore_stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/connection_pool.py", line 346, in
__aiter__
    async for part in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 295, in __aiter__
    raise exc
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 288, in __aiter__
    async for chunk in self._connection._receive_response_body(**kwargs):
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 160, in
_receive_response_body
    event = await self._receive_event(timeout=timeout)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 172, in
_receive_event
    data = await self._network_stream.read(
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/backends/asyncio.py", line 31, in read
    return await self._stream.receive(max_bytes=max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 171, in receive
    data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 108, in
_call_sslobject_method
    result = func(*args)
  File "/usr/lib/python3.8/ssl.py", line 888, in read
    v = self._sslobj.read(len)
ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635)
HFrost0 commented 2 years ago

我尝试执行了

bilix s https://www.bilibili.com/video/BV1hS4y1m7Ma --subtitle --max-con 20

在我这边网络条件下完整的下载下来了🤣,你或许可以使用--max-con 1来最大限度避免未知的网络错误,分段并发数以及音画异步下载仍然能保证较快的下载

我注意到,错误信息中出现 /home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py 这说明HTTP/2协议没有启用,这个可能是报错的原因,<-b站的后台确实有时候以http1.1接受请求,所以不是这个问题

showthesunli commented 2 years ago

那这个issue先关了吧,不容易复现