XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

Refactor get_access_token_and_cookies to include needs_auth parameter and improve cookie handling

456589f1
hlohaus <983577+hlohaus@users.noreply.github.com>
提交于

代码差异

1 个文件 +11 -6
Modified g4f/Provider/Copilot.py +11 -6
@@ -92,7 +92,7 @@ class Copilot(AsyncAuthedProvider, ProviderModelMixin):
92 92 debug.log(f"Copilot: {h}")
93 93 if has_nodriver:
94 94 yield RequestLogin(cls.label, os.environ.get("G4F_LOGIN_URL", ""))
95 access_token, useridentitytype, cookies = await get_access_token_and_cookies(cls.url, proxy)
95 access_token, useridentitytype, cookies = await get_access_token_and_cookies(cls.url, proxy, cls.needs_auth)
96 96 else:
97 97 raise h
98 98 yield AuthResult(
@@ -120,7 +120,7 @@ class Copilot(AsyncAuthedProvider, ProviderModelMixin):
120 120 model = cls.get_model(model)
121 121 websocket_url = cls.websocket_url
122 122 headers = None
123 if auth_result.access_token:
123 if getattr(auth_result, "access_token", None):
124 124 websocket_url = f"{websocket_url}&accessToken={quote(auth_result.access_token)}" + (f"&X-UserIdentityType={quote(auth_result.useridentitytype)}" if getattr(auth_result, "useridentitytype", None) else "")
125 125 headers = {"authorization": f"Bearer {auth_result.access_token}"}
126 126
@@ -303,7 +303,7 @@ class Copilot(AsyncAuthedProvider, ProviderModelMixin):
303 303 if not wss.closed:
304 304 await wss.close()
305 305
306 async def get_access_token_and_cookies(url: str, proxy: str = None):
306 async def get_access_token_and_cookies(url: str, proxy: str = None, needs_auth: bool = False):
307 307 browser, stop_browser = await get_nodriver(proxy=proxy)
308 308 try:
309 309 page = await browser.get(url)
@@ -334,11 +334,16 @@ async def get_access_token_and_cookies(url: str, proxy: str = None):
334 334 access_token, useridentitytype = access_token
335 335 access_token = access_token.get("value") if isinstance(access_token, dict) else access_token
336 336 useridentitytype = useridentitytype.get("value") if isinstance(useridentitytype, dict) else None
337 print(f"Got access token: {access_token[:10]}..., useridentitytype: {useridentitytype}")
337 debug.log(f"Got access token: {access_token[:10]}..., useridentitytype: {useridentitytype}")
338 break
339 if not needs_auth:
338 340 break
339 341 cookies = {}
340 for c in await page.send(nodriver.cdp.network.get_cookies([url])):
341 cookies[c.name] = c.value
342 while Copilot.anon_cookie_name not in cookies:
343 await asyncio.sleep(2)
344 cookies = {c.name: c.value for c in await page.send(nodriver.cdp.network.get_cookies([url]))}
345 if not needs_auth and Copilot.anon_cookie_name in cookies:
346 break
342 347 stop_browser()
343 348 return access_token, useridentitytype, cookies
344 349 finally: