[enh] network: add impersonate parameter

see
* https://github.com/lexiforest/curl_cffi
* https://github.com/vgavro/httpx-curl-cffi
This commit is contained in:
Alexandre Flament 2025-05-17 18:44:43 +02:00
parent 156d1eb8c8
commit c2bf60455a
3 changed files with 43 additions and 3 deletions

View file

@ -53,6 +53,7 @@ class Network:
'max_redirects',
'retries',
'retry_on_http_error',
'impersonate',
'_local_addresses_cycle',
'_proxies_cycle',
'_clients',
@ -63,6 +64,7 @@ class Network:
def __init__(
# pylint: disable=too-many-arguments
# pylint: disable=too-many-positional-arguments
self,
enable_http=True,
verify=True,
@ -77,6 +79,7 @@ class Network:
retry_on_http_error=None,
max_redirects=30,
logger_name=None,
impersonate=None,
):
self.enable_http = enable_http
@ -91,6 +94,7 @@ class Network:
self.retries = retries
self.retry_on_http_error = retry_on_http_error
self.max_redirects = max_redirects
self.impersonate = impersonate
self._local_addresses_cycle = self.get_ipaddress_cycle()
self._proxies_cycle = self.get_proxy_cycles()
self._clients = {}
@ -185,10 +189,11 @@ class Network:
max_redirects = self.max_redirects if max_redirects is None else max_redirects
local_address = next(self._local_addresses_cycle)
proxies = next(self._proxies_cycle) # is a tuple so it can be part of the key
key = (verify, max_redirects, local_address, proxies)
key = (verify, max_redirects, local_address, proxies, self.impersonate)
hook_log_response = self.log_response if sxng_debug else None
if key not in self._clients or self._clients[key].is_closed:
client = new_client(
self.impersonate,
self.enable_http,
verify,
self.enable_http2,