diff options
| -rw-r--r-- | youtube_dl/downloader/http.py | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/youtube_dl/downloader/http.py b/youtube_dl/downloader/http.py index 2f8490f02..a29f5cf31 100644 --- a/youtube_dl/downloader/http.py +++ b/youtube_dl/downloader/http.py @@ -58,14 +58,21 @@ class HttpFD(FileDownloader):              # Establish connection              try:                  data = self.ydl.urlopen(request) +                # When trying to resume, Content-Range HTTP header of response has to be checked +                # to match the value of requested Range HTTP header. This is due to a webservers +                # that don't support resuming and serve a whole file with no Content-Range +                # set in response despite of requested Range (see +                # https://github.com/rg3/youtube-dl/issues/6057#issuecomment-126129799)                  if resume_len > 0:                      content_range = data.headers.get('Content-Range')                      if content_range:                          content_range_m = re.search(r'bytes (\d+)-', content_range) -                        # Content-Range is correct - go on -                    if content_range_m and resume_len == int(content_range_m.group(1)): -                        break -                    # Content-Range is invalid - wipe the file and do entire redownload +                        # Content-Range is present and matches requested Range, resume is possible +                        if content_range_m and resume_len == int(content_range_m.group(1)): +                            break +                    # Content-Range is either not present or invalid. Assuming remote webserver is +                    # trying to send the whole file, resume is not possible, so wiping the local file +                    # and performing entire redownload                      self.report_unable_to_resume()                      resume_len = 0                      open_mode = 'wb' | 
