mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 18:47:06 -05:00 
			
		
		
		
	[downloader/http] Clarify rationale for Content-Range check (#6426)
This commit is contained in:
		@@ -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'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user