[utils] Register SOCKS protocols in urllib and support SOCKS4A

pull/9445/head
Yen Chi Hsuan 9 years ago
parent 9e9cd7248d
commit 51fb4995a5
No known key found for this signature in database
GPG Key ID: 3FDDD575826C5C30

@ -64,6 +64,7 @@ from .utils import (
PostProcessingError, PostProcessingError,
preferredencoding, preferredencoding,
prepend_extension, prepend_extension,
register_socks_protocols,
render_table, render_table,
replace_extension, replace_extension,
SameFileError, SameFileError,
@ -361,6 +362,8 @@ class YoutubeDL(object):
for ph in self.params.get('progress_hooks', []): for ph in self.params.get('progress_hooks', []):
self.add_progress_hook(ph) self.add_progress_hook(ph)
register_socks_protocols()
def warn_if_short_id(self, argv): def warn_if_short_id(self, argv):
# short YouTube ID starting with dash? # short YouTube ID starting with dash?
idxs = [ idxs = [

@ -61,6 +61,13 @@ from .socks import (
) )
def register_socks_protocols():
# "Register" SOCKS protocols
for scheme in ('socks', 'socks4', 'socks4a', 'socks5'):
if scheme not in compat_urlparse.uses_netloc:
compat_urlparse.uses_netloc.append(scheme)
# This is not clearly defined otherwise # This is not clearly defined otherwise
compiled_regex_type = type(re.compile('')) compiled_regex_type = type(re.compile(''))
@ -870,6 +877,8 @@ def make_socks_conn_class(base_class, socks_proxy):
socks_type = ProxyType.SOCKS5 socks_type = ProxyType.SOCKS5
elif url_components.scheme.lower() in ('socks', 'socks4'): elif url_components.scheme.lower() in ('socks', 'socks4'):
socks_type = ProxyType.SOCKS4 socks_type = ProxyType.SOCKS4
elif url_components.scheme.lower() == 'socks4a':
socks_type = ProxyType.SOCKS4A
proxy_args = ( proxy_args = (
socks_type, socks_type,
@ -2738,7 +2747,7 @@ class PerRequestProxyHandler(compat_urllib_request.ProxyHandler):
if proxy == '__noproxy__': if proxy == '__noproxy__':
return None # No Proxy return None # No Proxy
if compat_urlparse.urlparse(proxy).scheme.lower() in ('socks', 'socks4', 'socks5'): if compat_urlparse.urlparse(proxy).scheme.lower() in ('socks', 'socks4', 'socks4a', 'socks5'):
req.add_header('Ytdl-socks-proxy', proxy) req.add_header('Ytdl-socks-proxy', proxy)
# youtube-dl's http/https handlers do wrapping the socket with socks # youtube-dl's http/https handlers do wrapping the socket with socks
return None return None

Loading…
Cancel
Save