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

XFEstudio/gpt4free

Add _puid cookie, save access_token in cookies in OpenaiChat

50b796e8
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

1 个文件 +19 -7
Modified g4f/Provider/needs_auth/OpenaiChat.py +19 -7
@@ -7,9 +7,9 @@ from async_property import async_cached_property
7 7 from selenium.webdriver.common.by import By
8 8 from selenium.webdriver.support.ui import WebDriverWait
9 9 from selenium.webdriver.support import expected_conditions as EC
10
10
11 11 from ..base_provider import AsyncGeneratorProvider
12 from ..helper import get_event_loop, format_prompt
12 from ..helper import get_event_loop, format_prompt, get_cookies
13 13 from ...webdriver import get_browser
14 14 from ...typing import AsyncResult, Messages
15 15 from ...requests import StreamSession
@@ -27,7 +27,7 @@ class OpenaiChat(AsyncGeneratorProvider):
27 27 needs_auth = True
28 28 supports_gpt_35_turbo = True
29 29 supports_gpt_4 = True
30 _access_token: str = None
30 _cookies: dict = {}
31 31
32 32 @classmethod
33 33 async def create(
@@ -72,6 +72,7 @@ class OpenaiChat(AsyncGeneratorProvider):
72 72 proxy: str = None,
73 73 timeout: int = 120,
74 74 access_token: str = None,
75 cookies: dict = None,
75 76 auto_continue: bool = False,
76 77 history_disabled: bool = True,
77 78 action: str = "next",
@@ -86,13 +87,18 @@ class OpenaiChat(AsyncGeneratorProvider):
86 87 raise ValueError(f"Model are not supported: {model}")
87 88 if not parent_id:
88 89 parent_id = str(uuid.uuid4())
90 if not cookies:
91 cookies = cls._cookies
89 92 if not access_token:
90 access_token = cls._access_token
93 if not cookies:
94 cls._cookies = cookies = get_cookies("chat.openai.com")
95 if "access_token" in cookies:
96 access_token = cookies["access_token"]
91 97 if not access_token:
92 98 login_url = os.environ.get("G4F_LOGIN_URL")
93 99 if login_url:
94 100 yield f"Please login: [ChatGPT]({login_url})\n\n"
95 access_token = cls._access_token = await cls.browse_access_token(proxy)
101 cls._cookies["access_token"] = access_token = await cls.browse_access_token(proxy)
96 102 headers = {
97 103 "Accept": "text/event-stream",
98 104 "Authorization": f"Bearer {access_token}",
@@ -101,7 +107,8 @@ class OpenaiChat(AsyncGeneratorProvider):
101 107 proxies={"https": proxy},
102 108 impersonate="chrome110",
103 109 headers=headers,
104 timeout=timeout
110 timeout=timeout,
111 cookies=dict([(name, value) for name, value in cookies.items() if name == "_puid"])
105 112 ) as session:
106 113 end_turn = EndTurn()
107 114 while not end_turn.is_end:
@@ -170,7 +177,12 @@ class OpenaiChat(AsyncGeneratorProvider):
170 177 WebDriverWait(driver, 1200).until(
171 178 EC.presence_of_element_located((By.ID, "prompt-textarea"))
172 179 )
173 javascript = "return (await (await fetch('/api/auth/session')).json())['accessToken']"
180 javascript = """
181 access_token = (await (await fetch('/api/auth/session')).json())['accessToken'];
182 expires = new Date(); expires.setTime(expires.getTime() + 60 * 60 * 24 * 7); // One week
183 document.cookie = 'access_token=' + access_token + ';expires=' + expires.toUTCString() + ';path=/';
184 return access_token;
185 """
174 186 return driver.execute_script(javascript)
175 187 finally:
176 188 driver.quit()