Browse Source

[downloader/http] Clarify rationale for Content-Range check (#6426)

totalwebcasting
Sergey M․ 9 years ago
parent
commit
84bc4dcb0f
1 changed files with 11 additions and 4 deletions
  1. +11
    -4
      youtube_dl/downloader/http.py

+ 11
- 4
youtube_dl/downloader/http.py View File

@ -58,14 +58,21 @@ class HttpFD(FileDownloader):
# Establish connection # Establish connection
try: try:
data = self.ydl.urlopen(request) 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: if resume_len > 0:
content_range = data.headers.get('Content-Range') content_range = data.headers.get('Content-Range')
if content_range: if content_range:
content_range_m = re.search(r'bytes (\d+)-', 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() self.report_unable_to_resume()
resume_len = 0 resume_len = 0
open_mode = 'wb' open_mode = 'wb'


Loading…
Cancel
Save