22import random
33from functools import lru_cache
44
5- import requests as requests
5+ from curl_cffi import requests
66from bs4 import BeautifulSoup
77import datetime
88
@@ -82,7 +82,7 @@ def __init__(self, session=None, proxy=None):
8282 self ._cookie_lock = threading .Lock ()
8383
8484 self ._session , self ._proxy = None , None
85- self ._set_session (session or requests .Session ())
85+ self ._set_session (session or requests .Session (impersonate = "chrome" ))
8686 self ._set_proxy (proxy )
8787
8888 utils .get_yf_logger ().debug (f"Using User-Agent: { self .user_agent_headers ['User-Agent' ]} " )
@@ -174,14 +174,6 @@ def _load_cookie_basic(self):
174174 return cookie_dict ['cookie' ]
175175
176176 def _get_cookie_basic (self , timeout = 30 ):
177- if self ._cookie is not None :
178- utils .get_yf_logger ().debug ('reusing cookie' )
179- return self ._cookie
180-
181- self ._cookie = self ._load_cookie_basic ()
182- if self ._cookie is not None :
183- return self ._cookie
184-
185177 # To avoid infinite recursion, do NOT use self.get()
186178 # - 'allow_redirects' copied from @psychoz971 solution - does it help USA?
187179 response = self ._session .get (
@@ -190,31 +182,16 @@ def _get_cookie_basic(self, timeout=30):
190182 timeout = timeout ,
191183 allow_redirects = True )
192184
193- if not response .cookies :
194- utils .get_yf_logger ().debug ("response.cookies = None" )
195- return None
196- self ._cookie = list (response .cookies )[0 ]
197- if self ._cookie == '' :
198- utils .get_yf_logger ().debug ("list(response.cookies)[0] = ''" )
199- return None
200- self ._save_cookie_basic (self ._cookie )
201- utils .get_yf_logger ().debug (f"fetched basic cookie = { self ._cookie } " )
202- return self ._cookie
203-
204185 def _get_crumb_basic (self , timeout = 30 ):
205186 if self ._crumb is not None :
206187 utils .get_yf_logger ().debug ('reusing crumb' )
207188 return self ._crumb
208189
209- cookie = self ._get_cookie_basic ()
210- if cookie is None :
211- return None
212-
190+ self ._get_cookie_basic ()
213191 # - 'allow_redirects' copied from @psychoz971 solution - does it help USA?
214192 get_args = {
215193 'url' : "https://query1.finance.yahoo.com/v1/test/getcrumb" ,
216194 'headers' : self .user_agent_headers ,
217- 'cookies' : {cookie .name : cookie .value },
218195 'timeout' : timeout ,
219196 'allow_redirects' : True
220197 }
@@ -233,9 +210,9 @@ def _get_crumb_basic(self, timeout=30):
233210
234211 @utils .log_indent_decorator
235212 def _get_cookie_and_crumb_basic (self , timeout ):
236- cookie = self ._get_cookie_basic (timeout )
213+ self ._get_cookie_basic (timeout )
237214 crumb = self ._get_crumb_basic (timeout )
238- return cookie , crumb
215+ return crumb
239216
240217 def _get_cookie_csrf (self , timeout ):
241218 if self ._cookie is not None :
@@ -338,7 +315,7 @@ def _get_crumb_csrf(self, timeout=30):
338315
339316 @utils .log_indent_decorator
340317 def _get_cookie_and_crumb (self , timeout = 30 ):
341- cookie , crumb , strategy = None , None , None
318+ crumb , strategy = None , None
342319
343320 utils .get_yf_logger ().debug (f"cookie_mode = '{ self ._cookie_strategy } '" )
344321
@@ -348,16 +325,16 @@ def _get_cookie_and_crumb(self, timeout=30):
348325 if crumb is None :
349326 # Fail
350327 self ._set_cookie_strategy ('basic' , have_lock = True )
351- cookie , crumb = self ._get_cookie_and_crumb_basic (timeout )
328+ crumb = self ._get_cookie_and_crumb_basic (timeout )
352329 else :
353330 # Fallback strategy
354- cookie , crumb = self ._get_cookie_and_crumb_basic (timeout )
355- if cookie is None or crumb is None :
331+ crumb = self ._get_cookie_and_crumb_basic (timeout )
332+ if crumb is None :
356333 # Fail
357334 self ._set_cookie_strategy ('csrf' , have_lock = True )
358335 crumb = self ._get_crumb_csrf ()
359336 strategy = self ._cookie_strategy
360- return cookie , crumb , strategy
337+ return crumb , strategy
361338
362339 @utils .log_indent_decorator
363340 def get (self , url , user_agent_headers = None , params = None , timeout = 30 ):
@@ -382,21 +359,15 @@ def _make_request(self, url, request_method, user_agent_headers=None, body=None,
382359 if 'crumb' in params :
383360 raise Exception ("Don't manually add 'crumb' to params dict, let data.py handle it" )
384361
385- cookie , crumb , strategy = self ._get_cookie_and_crumb ()
362+ crumb , strategy = self ._get_cookie_and_crumb ()
386363 if crumb is not None :
387364 crumbs = {'crumb' : crumb }
388365 else :
389366 crumbs = {}
390- if strategy == 'basic' and cookie is not None :
391- # Basic cookie strategy adds cookie to GET parameters
392- cookies = {cookie .name : cookie .value }
393- else :
394- cookies = None
395367
396368 request_args = {
397369 'url' : url ,
398370 'params' : {** params , ** crumbs },
399- 'cookies' : cookies ,
400371 'timeout' : timeout ,
401372 'headers' : user_agent_headers or self .user_agent_headers
402373 }
@@ -412,10 +383,8 @@ def _make_request(self, url, request_method, user_agent_headers=None, body=None,
412383 self ._set_cookie_strategy ('csrf' )
413384 else :
414385 self ._set_cookie_strategy ('basic' )
415- cookie , crumb , strategy = self ._get_cookie_and_crumb (timeout )
386+ crumb , strategy = self ._get_cookie_and_crumb (timeout )
416387 request_args ['params' ]['crumb' ] = crumb
417- if strategy == 'basic' :
418- request_args ['cookies' ] = {cookie .name : cookie .value }
419388 response = request_method (** request_args )
420389 utils .get_yf_logger ().debug (f'response code={ response .status_code } ' )
421390
0 commit comments