フォーク元 g4f/gpt4free
106 行
3.5 KiB
Python
106 行
3.5 KiB
Python
import sys
|
|
import uuid
|
|
import json
|
|
import browser_cookie3
|
|
|
|
from curl_cffi import requests
|
|
|
|
config = json.loads(sys.argv[1])
|
|
|
|
def session_auth(cookies):
|
|
headers = {
|
|
'authority': 'chat.openai.com',
|
|
'accept': '*/*',
|
|
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
|
|
'cache-control': 'no-cache',
|
|
'pragma': 'no-cache',
|
|
'referer': 'https://chat.openai.com/chat',
|
|
'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
|
|
'sec-ch-ua-mobile': '?0',
|
|
'sec-ch-ua-platform': '"macOS"',
|
|
'sec-fetch-dest': 'empty',
|
|
'sec-fetch-mode': 'cors',
|
|
'sec-fetch-site': 'same-origin',
|
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
|
|
}
|
|
|
|
return requests.get('https://chat.openai.com/api/auth/session',
|
|
cookies=cookies, headers=headers, impersonate='chrome110').json()
|
|
|
|
all_cookies = {cookie.name: cookie.value for cookie in browser_cookie3.chrome(
|
|
domain_name='chat.openai.com')}
|
|
|
|
try:
|
|
cookies = {
|
|
'__Secure-next-auth.session-token': all_cookies['__Secure-next-auth.session-token'],
|
|
}
|
|
except Exception:
|
|
print('Failed to get "__Secure-next-auth.session-token" in chrome, please make sure you are authenticated on openai.com')
|
|
exit(0)
|
|
|
|
headers = {
|
|
'authority': 'chat.openai.com',
|
|
'accept': 'text/event-stream',
|
|
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
|
|
'authorization': 'Bearer ' + session_auth(cookies)['accessToken'],
|
|
'cache-control': 'no-cache',
|
|
'content-type': 'application/json',
|
|
'origin': 'https://chat.openai.com',
|
|
'pragma': 'no-cache',
|
|
'referer': 'https://chat.openai.com/chat',
|
|
'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
|
|
'sec-ch-ua-mobile': '?0',
|
|
'sec-ch-ua-platform': '"macOS"',
|
|
'sec-fetch-dest': 'empty',
|
|
'sec-fetch-mode': 'cors',
|
|
'sec-fetch-site': 'same-origin',
|
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
|
|
}
|
|
|
|
payload = {
|
|
'action': 'next',
|
|
'history_and_training_disabled': False,
|
|
'messages': [
|
|
{
|
|
'id': str(uuid.uuid4()),
|
|
'author': {
|
|
'role': 'user',
|
|
},
|
|
'content': {
|
|
'content_type': 'text',
|
|
'parts': [
|
|
config['messages'][-1]['content']
|
|
]
|
|
}
|
|
}
|
|
],
|
|
'model': 'text-davinci-002-render-sha',
|
|
'parent_message_id': str(uuid.uuid4()),
|
|
'supports_modapi': True,
|
|
'timezone_offset_min': -60
|
|
}
|
|
|
|
completion = ''
|
|
|
|
def format(chunk):
|
|
try:
|
|
global completion
|
|
|
|
if b'parts' in chunk:
|
|
json_data = json.loads(chunk.decode('utf-8').split('data: ')[1])
|
|
token = json_data['message']['content']['parts'][0]
|
|
token = token.replace(completion, '')
|
|
completion += token
|
|
|
|
print(token, flush=True, end = '')
|
|
|
|
except Exception as e:
|
|
pass
|
|
|
|
for _ in range(3):
|
|
try:
|
|
response = requests.post('https://chat.openai.com/backend-api/conversation',
|
|
json=payload, headers=headers, content_callback=format, impersonate='chrome110')
|
|
break
|
|
except:
|
|
continue |