[youtube:api] Do not use seek when reading HTTPError response

Authored-by: coletdjnz
This commit is contained in:
coletdjnz 2022-01-23 19:11:32 +13:00
parent e600a5c908
commit 87e8e8a7d0
No known key found for this signature in database
GPG Key ID: 91984263BB39894A

View File

@ -760,10 +760,12 @@ def _extract_response(self, item_id, query, note='Downloading API JSON', headers
note='%s%s' % (note, ' (retry #%d)' % count if count else ''))
except ExtractorError as e:
if isinstance(e.cause, network_exceptions):
if isinstance(e.cause, compat_HTTPError) and not is_html(e.cause.read(512)):
e.cause.seek(0)
if isinstance(e.cause, compat_HTTPError):
first_bytes = e.cause.read(512)
if not is_html(first_bytes):
yt_error = try_get(
self._parse_json(e.cause.read().decode(), item_id, fatal=False),
self._parse_json(
self._webpage_read_content(e.cause, None, item_id, prefix=first_bytes) or '{}', item_id, fatal=False),
lambda x: x['error']['message'], compat_str)
if yt_error:
self._report_alerts([('ERROR', yt_error)], fatal=False)