[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
1 changed files with 9 additions and 7 deletions

View File

@ -760,10 +760,12 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
note='%s%s' % (note, ' (retry #%d)' % count if count else '')) note='%s%s' % (note, ' (retry #%d)' % count if count else ''))
except ExtractorError as e: except ExtractorError as e:
if isinstance(e.cause, network_exceptions): if isinstance(e.cause, network_exceptions):
if isinstance(e.cause, compat_HTTPError) and not is_html(e.cause.read(512)): if isinstance(e.cause, compat_HTTPError):
e.cause.seek(0) first_bytes = e.cause.read(512)
if not is_html(first_bytes):
yt_error = try_get( 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) lambda x: x['error']['message'], compat_str)
if yt_error: if yt_error:
self._report_alerts([('ERROR', yt_error)], fatal=False) self._report_alerts([('ERROR', yt_error)], fatal=False)