diff options
author | Sergey M․ <dstftw@gmail.com> | 2015-08-03 02:27:47 +0600 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2015-08-03 02:27:47 +0600 |
commit | 84bc4dcb0f678f0a8c9f993e101b9769e3959f76 (patch) | |
tree | 429b02c0f3ab2a153f98b31e3dcaba49f59d6e03 /youtube_dl/downloader/http.py | |
parent | 10eaa8ef1d2a9699052af9262aa472456548e99b (diff) |
[downloader/http] Clarify rationale for Content-Range check (#6426)
Diffstat (limited to 'youtube_dl/downloader/http.py')
-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' |