|
|
@ -48,6 +48,7 @@ from ..utils import ( |
|
|
|
determine_protocol, |
|
|
|
parse_duration, |
|
|
|
mimetype2ext, |
|
|
|
update_url_query, |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -345,7 +346,7 @@ class InfoExtractor(object): |
|
|
|
def IE_NAME(self): |
|
|
|
return compat_str(type(self).__name__[:-2]) |
|
|
|
|
|
|
|
def _request_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True): |
|
|
|
def _request_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True, data=None, headers=None, query=None): |
|
|
|
""" Returns the response handle """ |
|
|
|
if note is None: |
|
|
|
self.report_download_webpage(video_id) |
|
|
@ -354,6 +355,12 @@ class InfoExtractor(object): |
|
|
|
self.to_screen('%s' % (note,)) |
|
|
|
else: |
|
|
|
self.to_screen('%s: %s' % (video_id, note)) |
|
|
|
# data, headers and query params will be ignored for `Request` objects |
|
|
|
if isinstance(url_or_request, compat_str): |
|
|
|
if query: |
|
|
|
url_or_request = update_url_query(url_or_request, query) |
|
|
|
if data or headers: |
|
|
|
url_or_request = sanitized_Request(url_or_request, data, headers or {}) |
|
|
|
try: |
|
|
|
return self._downloader.urlopen(url_or_request) |
|
|
|
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: |
|
|
@ -369,13 +376,13 @@ class InfoExtractor(object): |
|
|
|
self._downloader.report_warning(errmsg) |
|
|
|
return False |
|
|
|
|
|
|
|
def _download_webpage_handle(self, url_or_request, video_id, note=None, errnote=None, fatal=True, encoding=None): |
|
|
|
def _download_webpage_handle(self, url_or_request, video_id, note=None, errnote=None, fatal=True, encoding=None, data=None, headers=None, query=None): |
|
|
|
""" Returns a tuple (page content as string, URL handle) """ |
|
|
|
# Strip hashes from the URL (#1038) |
|
|
|
if isinstance(url_or_request, (compat_str, str)): |
|
|
|
url_or_request = url_or_request.partition('#')[0] |
|
|
|
|
|
|
|
urlh = self._request_webpage(url_or_request, video_id, note, errnote, fatal) |
|
|
|
urlh = self._request_webpage(url_or_request, video_id, note, errnote, fatal, data=data, headers=headers, query=query) |
|
|
|
if urlh is False: |
|
|
|
assert not fatal |
|
|
|
return False |
|
|
@ -462,13 +469,13 @@ class InfoExtractor(object): |
|
|
|
|
|
|
|
return content |
|
|
|
|
|
|
|
def _download_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True, tries=1, timeout=5, encoding=None): |
|
|
|
def _download_webpage(self, url_or_request, video_id, note=None, errnote=None, fatal=True, tries=1, timeout=5, encoding=None, data=None, headers=None, query=None): |
|
|
|
""" Returns the data of the page as a string """ |
|
|
|
success = False |
|
|
|
try_count = 0 |
|
|
|
while success is False: |
|
|
|
try: |
|
|
|
res = self._download_webpage_handle(url_or_request, video_id, note, errnote, fatal, encoding=encoding) |
|
|
|
res = self._download_webpage_handle(url_or_request, video_id, note, errnote, fatal, encoding=encoding, data=data, headers=headers, query=query) |
|
|
|
success = True |
|
|
|
except compat_http_client.IncompleteRead as e: |
|
|
|
try_count += 1 |
|
|
@ -483,10 +490,10 @@ class InfoExtractor(object): |
|
|
|
|
|
|
|
def _download_xml(self, url_or_request, video_id, |
|
|
|
note='Downloading XML', errnote='Unable to download XML', |
|
|
|
transform_source=None, fatal=True, encoding=None): |
|
|
|
transform_source=None, fatal=True, encoding=None, data=None, headers=None, query=None): |
|
|
|
"""Return the xml as an xml.etree.ElementTree.Element""" |
|
|
|
xml_string = self._download_webpage( |
|
|
|
url_or_request, video_id, note, errnote, fatal=fatal, encoding=encoding) |
|
|
|
url_or_request, video_id, note, errnote, fatal=fatal, encoding=encoding, data=data, headers=headers, query=query) |
|
|
|
if xml_string is False: |
|
|
|
return xml_string |
|
|
|
if transform_source: |
|
|
@ -497,10 +504,10 @@ class InfoExtractor(object): |
|
|
|
note='Downloading JSON metadata', |
|
|
|
errnote='Unable to download JSON metadata', |
|
|
|
transform_source=None, |
|
|
|
fatal=True, encoding=None): |
|
|
|
fatal=True, encoding=None, data=None, headers=None, query=None): |
|
|
|
json_string = self._download_webpage( |
|
|
|
url_or_request, video_id, note, errnote, fatal=fatal, |
|
|
|
encoding=encoding) |
|
|
|
encoding=encoding, data=data, headers=headers, query=query) |
|
|
|
if (not fatal) and json_string is False: |
|
|
|
return None |
|
|
|
return self._parse_json( |
|
|
|