[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'] | ||||
|         requested_bitrate = info_dict.get('tbr') | ||||
|         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() | ||||
|         # Some manifests may be malformed, e.g. prosiebensat1 generated manifests | ||||
|         # (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)) | ||||
|             frag_filename = '%s-%s' % (ctx['tmpfilename'], name) | ||||
|             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: | ||||
|                     return False | ||||
|                 (down, frag_sanitized) = sanitize_open(frag_filename, 'rb') | ||||
|   | ||||
| @@ -9,6 +9,7 @@ from ..utils import ( | ||||
|     error_to_compat_str, | ||||
|     encodeFilename, | ||||
|     sanitize_open, | ||||
|     sanitized_Request, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -37,6 +38,10 @@ class FragmentFD(FileDownloader): | ||||
|     def report_skip_fragment(self, 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): | ||||
|         self._prepare_frag_download(ctx) | ||||
|         self._start_frag_download(ctx) | ||||
|   | ||||
| @@ -59,7 +59,8 @@ class HlsFD(FragmentFD): | ||||
|     def real_download(self, filename, info_dict): | ||||
|         man_url = info_dict['url'] | ||||
|         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') | ||||
|  | ||||
| @@ -112,7 +113,10 @@ class HlsFD(FragmentFD): | ||||
|                     count = 0 | ||||
|                     while count <= fragment_retries: | ||||
|                         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: | ||||
|                                 return False | ||||
|                             down, frag_sanitized = sanitize_open(frag_filename, 'rb') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․