[downloader/http] Fix 302 infinite loops by not reusing requests
authorSergey M․ <dstftw@gmail.com>
Sat, 3 Feb 2018 23:58:34 +0000 (06:58 +0700)
committerSergey M․ <dstftw@gmail.com>
Sat, 3 Feb 2018 23:58:34 +0000 (06:58 +0700)
youtube_dl/downloader/http.py

index dc2b37beb8eeef4ab72ee6a214c330e48479f888..6b4122f8ded84e7c3f632471537f5a511eb62a85 100644 (file)
@@ -42,8 +42,6 @@ class HttpFD(FileDownloader):
         add_headers = info_dict.get('http_headers')
         if add_headers:
             headers.update(add_headers)
-        basic_request = sanitized_Request(url, None, headers)
-        request = sanitized_Request(url, None, headers)
 
         is_test = self.params.get('test', False)
         chunk_size = self._TEST_FILE_SIZE if is_test else (
@@ -98,6 +96,7 @@ class HttpFD(FileDownloader):
                 range_end = ctx.data_len - 1
             has_range = range_start is not None
             ctx.has_range = has_range
+            request = sanitized_Request(url, None, headers)
             if has_range:
                 set_range(request, range_start, range_end)
             # Establish connection
@@ -140,7 +139,8 @@ class HttpFD(FileDownloader):
                     # Unable to resume (requested range not satisfiable)
                     try:
                         # Open the connection again without the range header
-                        ctx.data = self.ydl.urlopen(basic_request)
+                        ctx.data = self.ydl.urlopen(
+                            sanitized_Request(url, None, headers))
                         content_length = ctx.data.info()['Content-Length']
                     except (compat_urllib_error.HTTPError, ) as err:
                         if err.code < 500 or err.code >= 600:
@@ -171,12 +171,6 @@ class HttpFD(FileDownloader):
                             ctx.resume_len = 0
                             ctx.open_mode = 'wb'
                             return
-                elif err.code == 302:
-                    if not chunk_size:
-                        raise
-                    # HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
-                    # may happen during chunk downloading. This is usually fixed
-                    # with a retry.
                 elif err.code < 500 or err.code >= 600:
                     # Unexpected HTTP error
                     raise