aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/downloader/http.py
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2015-08-03 02:27:47 +0600
committerSergey M․ <dstftw@gmail.com>2015-08-03 02:27:47 +0600
commit84bc4dcb0f678f0a8c9f993e101b9769e3959f76 (patch)
tree429b02c0f3ab2a153f98b31e3dcaba49f59d6e03 /youtube_dl/downloader/http.py
parent10eaa8ef1d2a9699052af9262aa472456548e99b (diff)
downloadyoutube-dl-84bc4dcb0f678f0a8c9f993e101b9769e3959f76.tar.xz
[downloader/http] Clarify rationale for Content-Range check (#6426)
Diffstat (limited to 'youtube_dl/downloader/http.py')
-rw-r--r--youtube_dl/downloader/http.py15
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'