返回提交历史
Modified
g4f/Provider/Copilot.py
+11
-6
XFEstudio/gpt4free
Refactor get_access_token_and_cookies to include needs_auth parameter and improve cookie handling
456589f1
代码差异
1 个文件
+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: