[networking] Fix + decoding in SOCKS proxy credentials (#17728)

Authored by: doe1080
This commit is contained in:
doe1080
2026-09-27 20:44:21 +02:00
committed by GitHub
parent 28731cbacb
commit caf63903a1
2 changed files with 11 additions and 9 deletions
+3 -3
View File
@@ -63,13 +63,13 @@ class TestNetworkingUtils:
'username': 'user',
'password': '',
}),
('socks4://u%40ser:pa%20ss@127.0.0.1:1080', {
('socks4://u%40ser+name:pa%20ss+word@127.0.0.1:1080', {
'proxytype': ProxyType.SOCKS4,
'addr': '127.0.0.1',
'port': 1080,
'rdns': False,
'username': 'u@ser',
'password': 'pa ss',
'username': 'u@ser+name',
'password': 'pa ss+word',
}),
('socks4a://:pa%20ss@127.0.0.1', {
'proxytype': ProxyType.SOCKS4A,
+8 -6
View File
@@ -52,25 +52,27 @@ def ssl_load_windows_store_certs(ssl_context, storename):
def make_socks_proxy_opts(socks_proxy):
url_components = urllib.parse.urlparse(socks_proxy)
if url_components.scheme.lower() == 'socks5':
scheme = url_components.scheme.lower()
if scheme == 'socks5':
socks_type = ProxyType.SOCKS5
rdns = False
elif url_components.scheme.lower() == 'socks5h':
elif scheme == 'socks5h':
socks_type = ProxyType.SOCKS5
rdns = True
elif url_components.scheme.lower() == 'socks4':
elif scheme == 'socks4':
socks_type = ProxyType.SOCKS4
rdns = False
elif url_components.scheme.lower() == 'socks4a':
elif scheme == 'socks4a':
socks_type = ProxyType.SOCKS4A
rdns = True
else:
raise ValueError(f'Unknown SOCKS proxy version: {url_components.scheme.lower()}')
raise ValueError(f'Unknown SOCKS proxy version: {scheme}')
def unquote_if_non_empty(s):
if not s:
return s
return urllib.parse.unquote_plus(s)
return urllib.parse.unquote(s)
return {
'proxytype': socks_type,
'addr': url_components.hostname,