@@ -193,12 +193,11 @@ def prepare_auth(
193193
194194 def prepare_headers (self , headers : HeaderTypes = None , user_agent : Optional [str ] = None ) -> Headers :
195195 """Prepare Headers. Gets base headers from rotator if available."""
196+ if headers is None :
197+ return self .headers .copy ()
196198 if isinstance (headers , HeaderRotator ):
197- headers_copy = headers .next (user_agent = user_agent )
198- else :
199- headers_copy = self .headers .copy ()
200-
201- return headers_copy
199+ return headers .next (user_agent = user_agent )
200+ return Headers (headers )
202201
203202 def prepare_cookies (self , cookies : CookieTypes = None ) -> Cookies :
204203 """Prepare Cookies"""
@@ -371,7 +370,8 @@ def _send(
371370 self , request : Request , * , history : list = None , start : float = None
372371 ) -> Response :
373372 start = start or time .perf_counter ()
374- config = self .prepare_config (request , tls_identifier = self .prepare_tls_identifier (self .client_identifier ))
373+ tls_identifier = self .prepare_tls_identifier (self .client_identifier )
374+ config = self .prepare_config (request , tls_identifier = tls_identifier )
375375 response = Response .from_tls_response (
376376 self .session .request (config .to_dict ()),
377377 is_byte_response = config .isByteResponse ,
@@ -515,6 +515,12 @@ def send(
515515 self .follow_redirects = follow_redirects
516516 response = self ._send (request , start = time .perf_counter (), history = [])
517517
518+ if isinstance (self .proxy , ProxyRotator ) and response .request .proxy :
519+ proxy_success = 200 <= response .status_code < 500 and response .status_code not in [407 ]
520+ self .proxy .mark_result (
521+ proxy = response .request .proxy , success = proxy_success , latency = response .elapsed
522+ )
523+
518524 if self .hooks .get ("response" ):
519525 response_ = self .build_hook_response (response )
520526 if isinstance (response_ , Response ):
@@ -757,12 +763,11 @@ class AsyncClient(BaseClient):
757763
758764 async def aprepare_headers (self , headers : HeaderTypes = None , user_agent : Optional [str ] = None ) -> Headers :
759765 """Prepare Headers. Gets base headers from rotator if available."""
766+ if headers is None :
767+ return self .headers .copy ()
760768 if isinstance (headers , HeaderRotator ):
761- headers_copy = await headers .anext (user_agent = user_agent )
762- else :
763- headers_copy = self .headers .copy ()
764-
765- return headers_copy
769+ return await headers .anext (user_agent = user_agent )
770+ return Headers (headers )
766771
767772 async def aprepare_proxy (self , proxy : ProxyTypes | None ) -> Optional [Proxy ]:
768773 if proxy is None :
@@ -1070,6 +1075,12 @@ async def send(
10701075 self .follow_redirects = follow_redirects
10711076 response = await self ._send (request , start = time .perf_counter (), history = [])
10721077
1078+ if isinstance (self .proxy , ProxyRotator ) and response .request .proxy :
1079+ proxy_success = 200 <= response .status_code < 500 and response .status_code not in [407 ]
1080+ await self .proxy .amark_result (
1081+ proxy = response .request .proxy , success = proxy_success , latency = response .elapsed
1082+ )
1083+
10731084 if self .hooks .get ("response" ):
10741085 response_ = self .build_hook_response (response )
10751086 if isinstance (response_ , Response ):
@@ -1084,7 +1095,8 @@ async def _send(
10841095 self , request : Request , * , history : list = None , start : float = None
10851096 ) -> Response :
10861097 start = start or time .perf_counter ()
1087- config = self .prepare_config (request , tls_identifier = await self .aprepare_tls_identifier (self .client_identifier ))
1098+ tls_identifier = await self .aprepare_tls_identifier (self .client_identifier )
1099+ config = self .prepare_config (request , tls_identifier = tls_identifier )
10881100 response = Response .from_tls_response (
10891101 await self .session .arequest (config .to_dict ()),
10901102 is_byte_response = config .isByteResponse ,
0 commit comments