@@ -11,8 +11,20 @@ import urllib3
11
11
12
12
from { {packageName} }.exceptions import ApiException, ApiValueError
13
13
14
+ SUPPORTED_SOCKS_PROXIES = { " socks5" , " socks5h" , " socks4" , " socks4a" }
14
15
RESTResponseType = urllib3.HTTPResponse
15
16
17
+
18
+ def is_socks_proxy_url(url):
19
+ if url is None:
20
+ return False
21
+ split_section = url.split("://")
22
+ if len(split_section) < 2:
23
+ return False
24
+ else:
25
+ return split_section[0].lower() in SUPPORTED_SOCKS_PROXIES
26
+
27
+
16
28
class RESTResponse(io.IOBase):
17
29
18
30
def __init__(self, resp) -> None:
@@ -67,15 +79,27 @@ class RESTClientObject:
67
79
68
80
# https pool manager
69
81
if configuration.proxy:
70
- self.pool_manager = urllib3.ProxyManager(
71
- cert_reqs=cert_reqs,
72
- ca_certs=configuration.ssl_ca_cert,
73
- cert_file=configuration.cert_file,
74
- key_file=configuration.key_file,
75
- proxy_url=configuration.proxy,
76
- proxy_headers=configuration.proxy_headers,
77
- **addition_pool_args
78
- )
82
+ if is_socks_proxy_url(configuration.proxy):
83
+ from urllib3.contrib.socks import SOCKSProxyManager
84
+ self.pool_manager = SOCKSProxyManager(
85
+ cert_reqs=cert_reqs,
86
+ ca_certs=configuration.ssl_ca_cert,
87
+ cert_file=configuration.cert_file,
88
+ key_file=configuration.key_file,
89
+ proxy_url=configuration.proxy,
90
+ headers=configuration.proxy_headers,
91
+ **addition_pool_args
92
+ )
93
+ else:
94
+ self.pool_manager = urllib3.ProxyManager(
95
+ cert_reqs=cert_reqs,
96
+ ca_certs=configuration.ssl_ca_cert,
97
+ cert_file=configuration.cert_file,
98
+ key_file=configuration.key_file,
99
+ proxy_url=configuration.proxy,
100
+ proxy_headers=configuration.proxy_headers,
101
+ **addition_pool_args
102
+ )
79
103
else:
80
104
self.pool_manager = urllib3.PoolManager(
81
105
cert_reqs=cert_reqs,
0 commit comments