on master help sign in
[mod] searx.network.client: the same configuration reuses the same ssl.SSLContext
5e53e94Alexandre Flament
searx/network/client.py+11−1
@@ -23,6 +23,7 @@ else:
23
23
24logger = logger.getChild('searx.http.client')
24logger = logger.getChild('searx.http.client')
25LOOP = None
25LOOP = None
26+SSLCONTEXTS = {}
26TRANSPORT_KWARGS = {
27TRANSPORT_KWARGS = {
27 'backend': 'asyncio',
28 'backend': 'asyncio',
28 'trust_env': False,
29 'trust_env': False,
@@ -41,6 +42,14 @@ async def close_connections_for_url(connection_pool: httpcore.AsyncConnectionPoo
41 logger.warning('Error closing an existing connection', exc_info=e)
42 logger.warning('Error closing an existing connection', exc_info=e)
42
43
43
44
45+def get_sslcontexts(proxy_url=None, cert=None, verify=True, trust_env=True, http2=False):
46+ global SSLCONTEXTS
47+ key = (proxy_url, cert, verify, trust_env, http2)
48+ if key not in SSLCONTEXTS:
49+ SSLCONTEXTS[key] = httpx.create_ssl_context(cert, verify, trust_env, http2)
50+ return SSLCONTEXTS[key]
51+
52+
44class AsyncHTTPTransportNoHttp(httpcore.AsyncHTTPTransport):
53class AsyncHTTPTransportNoHttp(httpcore.AsyncHTTPTransport):
45 """Block HTTP request"""
54 """Block HTTP request"""
46
55
@@ -131,7 +140,7 @@ def get_transport_for_socks_proxy(verify, http2, local_address, proxy_url, limit
131 rdns = True
140 rdns = True
132
141
133 proxy_type, proxy_host, proxy_port, proxy_username, proxy_password = parse_proxy_url(proxy_url)
142 proxy_type, proxy_host, proxy_port, proxy_username, proxy_password = parse_proxy_url(proxy_url)
134−
143+ verify = get_sslcontexts(proxy_url, None, True, False, http2) if verify is True else verify
135 return AsyncProxyTransportFixed(proxy_type=proxy_type, proxy_host=proxy_host, proxy_port=proxy_port,
144 return AsyncProxyTransportFixed(proxy_type=proxy_type, proxy_host=proxy_host, proxy_port=proxy_port,
136 username=proxy_username, password=proxy_password,
145 username=proxy_username, password=proxy_password,
137 rdns=rdns,
146 rdns=rdns,
@@ -147,6 +156,7 @@ def get_transport_for_socks_proxy(verify, http2, local_address, proxy_url, limit
147
156
148
157
149def get_transport(verify, http2, local_address, proxy_url, limit, retries):
158def get_transport(verify, http2, local_address, proxy_url, limit, retries):
159+ verify = get_sslcontexts(None, None, True, False, http2) if verify is True else verify
150 return AsyncHTTPTransportFixed(verify=verify,
160 return AsyncHTTPTransportFixed(verify=verify,
151 http2=http2,
161 http2=http2,
152 local_address=local_address,
162 local_address=local_address,