mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 20:07:08 -05: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']
 | 
			
		||||
        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