Use original Referer URL in Brightcove requests (Fixes #2110)
This commit is contained in:
parent
400e58103d
commit
79f8295303
@ -14,6 +14,7 @@ from ..utils import (
|
|||||||
compat_urllib_request,
|
compat_urllib_request,
|
||||||
|
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
unsmuggle_url,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -121,6 +122,8 @@ class BrightcoveIE(InfoExtractor):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
url, smuggled_data = unsmuggle_url(url, {})
|
||||||
|
|
||||||
# Change the 'videoId' and others field to '@videoPlayer'
|
# Change the 'videoId' and others field to '@videoPlayer'
|
||||||
url = re.sub(r'(?<=[?&])(videoI(d|D)|bctid)', '%40videoPlayer', url)
|
url = re.sub(r'(?<=[?&])(videoI(d|D)|bctid)', '%40videoPlayer', url)
|
||||||
# Change bckey (used by bcove.me urls) to playerKey
|
# Change bckey (used by bcove.me urls) to playerKey
|
||||||
@ -131,9 +134,10 @@ class BrightcoveIE(InfoExtractor):
|
|||||||
|
|
||||||
videoPlayer = query.get('@videoPlayer')
|
videoPlayer = query.get('@videoPlayer')
|
||||||
if videoPlayer:
|
if videoPlayer:
|
||||||
return self._get_video_info(videoPlayer[0], query_str, query,
|
# We set the original url as the default 'Referer' header
|
||||||
# We set the original url as the default 'Referer' header
|
referer = smuggled_data.get('Referer', url)
|
||||||
referer=url)
|
return self._get_video_info(
|
||||||
|
videoPlayer[0], query_str, query, referer=referer)
|
||||||
else:
|
else:
|
||||||
player_key = query['playerKey']
|
player_key = query['playerKey']
|
||||||
return self._get_playlist_info(player_key[0])
|
return self._get_playlist_info(player_key[0])
|
||||||
|
@ -225,7 +225,8 @@ class GenericIE(InfoExtractor):
|
|||||||
bc_url = BrightcoveIE._extract_brightcove_url(webpage)
|
bc_url = BrightcoveIE._extract_brightcove_url(webpage)
|
||||||
if bc_url is not None:
|
if bc_url is not None:
|
||||||
self.to_screen('Brightcove video detected.')
|
self.to_screen('Brightcove video detected.')
|
||||||
return self.url_result(bc_url, 'Brightcove')
|
surl = smuggle_url(bc_url, {'Referer': url})
|
||||||
|
return self.url_result(surl, 'Brightcove')
|
||||||
|
|
||||||
# Look for embedded (iframe) Vimeo player
|
# Look for embedded (iframe) Vimeo player
|
||||||
mobj = re.search(
|
mobj = re.search(
|
||||||
|
@ -1027,9 +1027,9 @@ def smuggle_url(url, data):
|
|||||||
return url + u'#' + sdata
|
return url + u'#' + sdata
|
||||||
|
|
||||||
|
|
||||||
def unsmuggle_url(smug_url):
|
def unsmuggle_url(smug_url, default=None):
|
||||||
if not '#__youtubedl_smuggle' in smug_url:
|
if not '#__youtubedl_smuggle' in smug_url:
|
||||||
return smug_url, None
|
return smug_url, default
|
||||||
url, _, sdata = smug_url.rpartition(u'#')
|
url, _, sdata = smug_url.rpartition(u'#')
|
||||||
jsond = compat_parse_qs(sdata)[u'__youtubedl_smuggle'][0]
|
jsond = compat_parse_qs(sdata)[u'__youtubedl_smuggle'][0]
|
||||||
data = json.loads(jsond)
|
data = json.loads(jsond)
|
||||||
|
Loading…
Reference in New Issue
Block a user