Browse Source
[downoader/fragment,f4m,hls] Add internal support for custom HTTP headers
master
Sergey M․
8 years ago
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
3 changed files with
17 additions and
4 deletions
-
youtube_dl/downloader/f4m.py
-
youtube_dl/downloader/fragment.py
-
youtube_dl/downloader/hls.py
|
|
@ -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') |
|
|
|