1616
1717T = TypeVar ("T" )
1818
19- TLS_IDENTIFIER_TEMPLATES = [
20- "chrome_103" ,
21- "chrome_104" ,
22- "chrome_105" ,
23- "chrome_106" ,
24- "chrome_107" ,
25- "chrome_108" ,
26- "chrome_109" ,
27- "chrome_110" ,
28- "chrome_111" ,
29- "chrome_112" ,
30- "chrome_116_PSK" ,
31- "chrome_116_PSK_PQ" ,
32- "chrome_117" ,
19+ TLS_IDENTIFIER_TEMPLATES : list [str ] = sorted ([
3320 "chrome_120" ,
3421 "chrome_124" ,
35- "safari_15_6_1" ,
22+ "chrome_131" ,
23+ "chrome_133" ,
24+ "firefox_120" ,
25+ "firefox_123" ,
26+ "firefox_132" ,
27+ "firefox_133" ,
3628 "safari_16_0" ,
37- "safari_ios_15_5" ,
38- "safari_ios_15_6" ,
3929 "safari_ios_16_0" ,
40- "firefox_102" ,
41- "firefox_104" ,
42- "firefox_105" ,
43- "firefox_106" ,
44- "firefox_108" ,
45- "firefox_110" ,
46- "firefox_117" ,
47- "firefox_120" ,
48- "opera_89" ,
49- "opera_90" ,
50- "opera_91" ,
51- "okhttp4_android_7" ,
52- "okhttp4_android_8" ,
53- "okhttp4_android_9" ,
54- "okhttp4_android_10" ,
55- "okhttp4_android_11" ,
56- "okhttp4_android_12" ,
57- "okhttp4_android_13" ,
58- "zalando_ios_mobile" ,
59- "zalando_android_mobile" ,
60- "nike_ios_mobile" ,
61- "nike_android_mobile" ,
62- "mms_ios" ,
63- "mms_ios_2" ,
64- "mms_ios_3" ,
65- "mesh_ios" ,
66- "mesh_ios_2" ,
67- "mesh_android" ,
68- "mesh_android_2" ,
69- "confirmed_ios" ,
70- "confirmed_android" ,
71- "confirmed_android_2" ,
72- ]
30+ "safari_ios_17_0" ,
31+ "safari_ios_18_0" ,
32+ "safari_ios_18_5" ,
33+ ])
7334
7435USER_AGENTS = [
7536 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ,
9253 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0" ,
9354 "Mozilla/5.0 (Linux; Android 14; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36" ,
9455 "Mozilla/5.0 (Linux; Android 14; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36" ,
95- "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1" ,
9656 "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1" ,
9757 "Mozilla/5.0 (Linux; Android 15; SM-S931B Build/AP3A.240905.015.A2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.103 Mobile Safari/537.36" ,
98- "Mozila /5.0 (Linux; Android 14; SM-S928B/DS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.230 Mobile Safari/537.36" ,
58+ "Mozilla /5.0 (Linux; Android 14; SM-S928B/DS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.230 Mobile Safari/537.36" ,
9959 "Mozilla/5.0 (Linux; Android 14; SM-F956U) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.119 Mobile Safari/537.36" ,
10060 "Mozilla/5.0 (Linux; Android 13; SM-S911U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Mobile Safari/537.36" ,
10161 "Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36" ,
@@ -318,11 +278,9 @@ class ProxyRotator(BaseRotator[Proxy]):
318278 def rebuild_item (cls , item : Any ) -> Optional [Proxy ]:
319279 """Constructs a `Proxy` object from various input types."""
320280 try :
321- if isinstance (item , Proxy ):
322- return item
323281 if isinstance (item , dict ):
324282 return Proxy .from_dict (item )
325- if isinstance (item , str ):
283+ if isinstance (item , ( str , Proxy ) ):
326284 return Proxy .from_string (item )
327285 except Exception :
328286 return None
@@ -414,7 +372,7 @@ class HeaderRotator(BaseRotator[Headers]):
414372 def __init__ (
415373 self ,
416374 items : Optional [Iterable [T ]] = None ,
417- strategy : Literal ["round_robin" , "random" , "weighted" ] = "round_robin " ,
375+ strategy : Literal ["round_robin" , "random" , "weighted" ] = "random " ,
418376 ) -> None :
419377 super ().__init__ (items or HEADER_TEMPLATES , strategy )
420378
@@ -434,11 +392,9 @@ def rebuild_item(cls, item: HeaderTypes) -> Optional[Headers]:
434392 try :
435393 if isinstance (item , Headers ):
436394 return item
437- if isinstance (item , (dict , list )):
438- return Headers (item )
395+ return Headers (item )
439396 except Exception :
440397 return None
441- return None
442398
443399 def next (self , user_agent : Optional [str ] = None ) -> Headers :
444400 """
@@ -452,12 +408,12 @@ def next(self, user_agent: Optional[str] = None) -> Headers:
452408 Returns:
453409 A copy of the next `Headers` object, potentially with a modified User-Agent.
454410 """
455- base_headers = super ().next ()
456- headers_copy = base_headers .copy ()
457-
411+ headers = super ().next ()
412+ headers_copy = headers .copy ()
413+ if not isinstance (headers_copy , Headers ):
414+ headers_copy = Headers (headers_copy )
458415 if user_agent :
459416 headers_copy ["User-Agent" ] = user_agent
460-
461417 return headers_copy
462418
463419 async def anext (self , user_agent : Optional [str ] = None ) -> Headers :
@@ -472,8 +428,10 @@ async def anext(self, user_agent: Optional[str] = None) -> Headers:
472428 Returns:
473429 A copy of the next `Headers` object, potentially with a modified User-Agent.
474430 """
475- base_headers = await super ().anext ()
476- headers_copy = base_headers .copy ()
431+ headers = await super ().anext ()
432+ headers_copy = headers .copy ()
433+ if not isinstance (headers_copy , Headers ):
434+ headers_copy = Headers (headers_copy )
477435 if user_agent :
478436 headers_copy ["User-Agent" ] = user_agent
479437 return headers_copy
0 commit comments