|
@ -476,7 +476,7 @@ def formatSeconds(secs): |
|
|
def make_HTTPS_handler(opts): |
|
|
def make_HTTPS_handler(opts): |
|
|
if sys.version_info < (3,2): |
|
|
if sys.version_info < (3,2): |
|
|
# Python's 2.x handler is very simplistic |
|
|
# Python's 2.x handler is very simplistic |
|
|
return compat_urllib_request.HTTPSHandler() |
|
|
|
|
|
|
|
|
return YoutubeDLHandlerHTTPS() |
|
|
else: |
|
|
else: |
|
|
import ssl |
|
|
import ssl |
|
|
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) |
|
|
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) |
|
@ -485,7 +485,7 @@ def make_HTTPS_handler(opts): |
|
|
context.verify_mode = (ssl.CERT_NONE |
|
|
context.verify_mode = (ssl.CERT_NONE |
|
|
if opts.no_check_certificate |
|
|
if opts.no_check_certificate |
|
|
else ssl.CERT_REQUIRED) |
|
|
else ssl.CERT_REQUIRED) |
|
|
return compat_urllib_request.HTTPSHandler(context=context) |
|
|
|
|
|
|
|
|
return YoutubeDLHandlerHTTPS(context=context) |
|
|
|
|
|
|
|
|
class ExtractorError(Exception): |
|
|
class ExtractorError(Exception): |
|
|
"""Error during info extraction.""" |
|
|
"""Error during info extraction.""" |
|
@ -569,7 +569,8 @@ class ContentTooShortError(Exception): |
|
|
self.downloaded = downloaded |
|
|
self.downloaded = downloaded |
|
|
self.expected = expected |
|
|
self.expected = expected |
|
|
|
|
|
|
|
|
class YoutubeDLHandler(compat_urllib_request.HTTPHandler): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YoutubeDLHandler_Template: # Old-style class, like HTTPHandler |
|
|
"""Handler for HTTP requests and responses. |
|
|
"""Handler for HTTP requests and responses. |
|
|
|
|
|
|
|
|
This class, when installed with an OpenerDirector, automatically adds |
|
|
This class, when installed with an OpenerDirector, automatically adds |
|
@ -602,8 +603,8 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler): |
|
|
ret.code = code |
|
|
ret.code = code |
|
|
return ret |
|
|
return ret |
|
|
|
|
|
|
|
|
def http_request(self, req): |
|
|
|
|
|
for h,v in std_headers.items(): |
|
|
|
|
|
|
|
|
def _http_request(self, req): |
|
|
|
|
|
for h, v in std_headers.items(): |
|
|
if h in req.headers: |
|
|
if h in req.headers: |
|
|
del req.headers[h] |
|
|
del req.headers[h] |
|
|
req.add_header(h, v) |
|
|
req.add_header(h, v) |
|
@ -618,7 +619,7 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler): |
|
|
del req.headers['Youtubedl-user-agent'] |
|
|
del req.headers['Youtubedl-user-agent'] |
|
|
return req |
|
|
return req |
|
|
|
|
|
|
|
|
def http_response(self, req, resp): |
|
|
|
|
|
|
|
|
def _http_response(self, req, resp): |
|
|
old_resp = resp |
|
|
old_resp = resp |
|
|
# gzip |
|
|
# gzip |
|
|
if resp.headers.get('Content-encoding', '') == 'gzip': |
|
|
if resp.headers.get('Content-encoding', '') == 'gzip': |
|
@ -632,8 +633,16 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler): |
|
|
resp.msg = old_resp.msg |
|
|
resp.msg = old_resp.msg |
|
|
return resp |
|
|
return resp |
|
|
|
|
|
|
|
|
https_request = http_request |
|
|
|
|
|
https_response = http_response |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YoutubeDLHandler(YoutubeDLHandler_Template, compat_urllib_request.HTTPHandler): |
|
|
|
|
|
http_request = YoutubeDLHandler_Template._http_request |
|
|
|
|
|
http_response = YoutubeDLHandler_Template._http_response |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YoutubeDLHandlerHTTPS(YoutubeDLHandler_Template, compat_urllib_request.HTTPSHandler): |
|
|
|
|
|
https_request = YoutubeDLHandler_Template._http_request |
|
|
|
|
|
https_response = YoutubeDLHandler_Template._http_response |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unified_strdate(date_str): |
|
|
def unified_strdate(date_str): |
|
|
"""Return a string with the date in the format YYYYMMDD""" |
|
|
"""Return a string with the date in the format YYYYMMDD""" |
|
|