mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[downoader/fragment,f4m,hls] Add internal support for custom HTTP headers
This commit is contained in:
		| @@ -314,7 +314,8 @@ class F4mFD(FragmentFD): | |||||||
|         man_url = info_dict['url'] |         man_url = info_dict['url'] | ||||||
|         requested_bitrate = info_dict.get('tbr') |         requested_bitrate = info_dict.get('tbr') | ||||||
|         self.to_screen('[%s] Downloading f4m manifest' % self.FD_NAME) |         self.to_screen('[%s] Downloading f4m manifest' % self.FD_NAME) | ||||||
|         urlh = self.ydl.urlopen(man_url) |  | ||||||
|  |         urlh = self.ydl.urlopen(self._prepare_url(info_dict, man_url)) | ||||||
|         man_url = urlh.geturl() |         man_url = urlh.geturl() | ||||||
|         # Some manifests may be malformed, e.g. prosiebensat1 generated manifests |         # Some manifests may be malformed, e.g. prosiebensat1 generated manifests | ||||||
|         # (see https://github.com/rg3/youtube-dl/issues/6215#issuecomment-121704244 |         # (see https://github.com/rg3/youtube-dl/issues/6215#issuecomment-121704244 | ||||||
| @@ -387,7 +388,10 @@ class F4mFD(FragmentFD): | |||||||
|             url_parsed = base_url_parsed._replace(path=base_url_parsed.path + name, query='&'.join(query)) |             url_parsed = base_url_parsed._replace(path=base_url_parsed.path + name, query='&'.join(query)) | ||||||
|             frag_filename = '%s-%s' % (ctx['tmpfilename'], name) |             frag_filename = '%s-%s' % (ctx['tmpfilename'], name) | ||||||
|             try: |             try: | ||||||
|                 success = ctx['dl'].download(frag_filename, {'url': url_parsed.geturl()}) |                 success = ctx['dl'].download(frag_filename, { | ||||||
|  |                     'url': url_parsed.geturl(), | ||||||
|  |                     'http_headers': info_dict.get('http_headers'), | ||||||
|  |                 }) | ||||||
|                 if not success: |                 if not success: | ||||||
|                     return False |                     return False | ||||||
|                 (down, frag_sanitized) = sanitize_open(frag_filename, 'rb') |                 (down, frag_sanitized) = sanitize_open(frag_filename, 'rb') | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ from ..utils import ( | |||||||
|     error_to_compat_str, |     error_to_compat_str, | ||||||
|     encodeFilename, |     encodeFilename, | ||||||
|     sanitize_open, |     sanitize_open, | ||||||
|  |     sanitized_Request, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -37,6 +38,10 @@ class FragmentFD(FileDownloader): | |||||||
|     def report_skip_fragment(self, fragment_name): |     def report_skip_fragment(self, fragment_name): | ||||||
|         self.to_screen('[download] Skipping fragment %s...' % fragment_name) |         self.to_screen('[download] Skipping fragment %s...' % fragment_name) | ||||||
|  |  | ||||||
|  |     def _prepare_url(self, info_dict, url): | ||||||
|  |         headers = info_dict.get('http_headers') | ||||||
|  |         return sanitized_Request(url, None, headers) if headers else url | ||||||
|  |  | ||||||
|     def _prepare_and_start_frag_download(self, ctx): |     def _prepare_and_start_frag_download(self, ctx): | ||||||
|         self._prepare_frag_download(ctx) |         self._prepare_frag_download(ctx) | ||||||
|         self._start_frag_download(ctx) |         self._start_frag_download(ctx) | ||||||
|   | |||||||
| @@ -59,7 +59,8 @@ class HlsFD(FragmentFD): | |||||||
|     def real_download(self, filename, info_dict): |     def real_download(self, filename, info_dict): | ||||||
|         man_url = info_dict['url'] |         man_url = info_dict['url'] | ||||||
|         self.to_screen('[%s] Downloading m3u8 manifest' % self.FD_NAME) |         self.to_screen('[%s] Downloading m3u8 manifest' % self.FD_NAME) | ||||||
|         manifest = self.ydl.urlopen(man_url).read() |  | ||||||
|  |         manifest = self.ydl.urlopen(self._prepare_url(info_dict, man_url)).read() | ||||||
|  |  | ||||||
|         s = manifest.decode('utf-8', 'ignore') |         s = manifest.decode('utf-8', 'ignore') | ||||||
|  |  | ||||||
| @@ -112,7 +113,10 @@ class HlsFD(FragmentFD): | |||||||
|                     count = 0 |                     count = 0 | ||||||
|                     while count <= fragment_retries: |                     while count <= fragment_retries: | ||||||
|                         try: |                         try: | ||||||
|                             success = ctx['dl'].download(frag_filename, {'url': frag_url}) |                             success = ctx['dl'].download(frag_filename, { | ||||||
|  |                                 'url': frag_url, | ||||||
|  |                                 'http_headers': info_dict.get('http_headers'), | ||||||
|  |                             }) | ||||||
|                             if not success: |                             if not success: | ||||||
|                                 return False |                                 return False | ||||||
|                             down, frag_sanitized = sanitize_open(frag_filename, 'rb') |                             down, frag_sanitized = sanitize_open(frag_filename, 'rb') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user