]> jfr.im git - yt-dlp.git/commitdiff
[youtube] Make `--extractor-retries` work for more errors
authorpukkandan <redacted>
Wed, 21 Jul 2021 17:57:23 +0000 (23:27 +0530)
committerpukkandan <redacted>
Wed, 21 Jul 2021 21:02:20 +0000 (02:32 +0530)
Closes #507

yt_dlp/extractor/youtube.py

index 48c42072ac88f5329198183a5d4d5062508460d2..49cb8a233e4e47b8d712bd1b776a3ff77facfbda 100644 (file)
@@ -39,6 +39,7 @@
     int_or_none,
     intlist_to_bytes,
     mimetype2ext,
+    network_exceptions,
     orderedSet,
     parse_codecs,
     parse_count,
@@ -760,12 +761,15 @@ def _extract_response(self, item_id, query, note='Downloading API JSON', headers
                     api_hostname=api_hostname, default_client=default_client,
                     note='%s%s' % (note, ' (retry #%d)' % count if count else ''))
             except ExtractorError as e:
-                if isinstance(e.cause, compat_HTTPError) and e.cause.code in (500, 503, 404):
+                if isinstance(e.cause, network_exceptions):
                     # Downloading page may result in intermittent 5xx HTTP error
                     # Sometimes a 404 is also recieved. See: https://github.com/ytdl-org/youtube-dl/issues/28289
-                    last_error = 'HTTP Error %s' % e.cause.code
-                    if count < retries:
-                        continue
+                    # We also want to catch all other network exceptions since errors in later pages can be troublesome
+                    # See https://github.com/yt-dlp/yt-dlp/issues/507#issuecomment-880188210
+                    if not isinstance(e.cause, compat_HTTPError) or e.cause.code not in (403, 429):
+                        last_error = error_to_compat_str(e.cause or e)
+                        if count < retries:
+                            continue
                 if fatal:
                     raise
                 else: