脚本如下
我是py
import requests
from urllib.parse import urlparse, parse_qs
import json
import sys
CHATGPT_API_PREFIX = "/chatgpt"
IMITATE_API_PREFIX = "/imitate/v1"
CHATGPT_API_URL_PREFIX = "https://chatgpt.com"
PLATFORM_API_PREFIX = "/platform"
PLATFORM_API_URL_PREFIX = "https://api.openai.com"
DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
"AppleWebKit/537.36 (KHTML, like Gecko) " \
"Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
AUTH0_URL = "https://auth0.openai.com"
LOGIN_USERNAME_URL = AUTH0_URL + "/u/login/identifier?state="
LOGIN_PASSWORD_URL = AUTH0_URL + "/u/login/password?state="
GET_TOKEN_URL = AUTH0_URL + "/oauth/token"
DASHBOARD_LOGIN_URL = "https://api.openai.com/dashboard/onboarding/login"
# OAuth2 Parameters
CLIENT_ID = "DRivsnm2Mu42T3KOpqdtwB3NYviHYzwD"
AUDIENCE = "https://api.openai.com/v1"
REDIRECT_URI = "https://platform.openai.com/auth/callback"
SCOPE = "openid profile email offline_access"
RESPONSE_TYPE = "code"
# Error Messages
PARSE_USER_INFO_ERROR_MESSAGE = "Failed to parse user login info"
GET_AUTHORIZED_URL_ERROR_MESSAGE = "Failed to get authorized URL"
EMAIL_INVALID_ERROR_MESSAGE = "Email is not valid"
EMAIL_OR_PASSWORD_INVALID_ERROR_MESSAGE = "Email or password is not correct"
GET_ACCESS_TOKEN_ERROR_MESSAGE = "Failed to get access token"
GET_SESSION_KEY_ERROR_MESSAGE = "Failed to get session key"
def get_authorized_url(session):
url_params = {
"client_id": CLIENT_ID,
"audience": AUDIENCE,
"redirect_uri": REDIRECT_URI,
"scope": SCOPE,
"response_type": RESPONSE_TYPE
}
response = session.get(AUTH0_URL + "/authorize", params=url_params, headers={
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": DEFAULT_USER_AGENT
})
if response.status_code != 200:
print(GET_AUTHORIZED_URL_ERROR_MESSAGE)
sys.exit(1)
return response.url
def extract_state(authorized_url):
parsed_url = urlparse(authorized_url)
query_params = parse_qs(parsed_url.query)
state = query_params.get('state', [None])[0]
if not state:
print("State parameter not found in authorized URL.")
sys.exit(1)
return state
def check_username(session, state, username):
payload = {
"state": state,
"username": username,
"js-available": "true",
"webauthn-available": "true",
"is-brave": "false",
"webauthn-platform-available": "false",
"action": "default"
}
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": DEFAULT_USER_AGENT
}
response = session.post(LOGIN_USERNAME_URL + state, data=payload, headers=headers)
if response.status_code != 200:
print(EMAIL_INVALID_ERROR_MESSAGE)
sys.exit(1)
def check_password(session, state, username, password):
payload = {
"state": state,
"username": username,
"password": password,
"action": "default"
}
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": DEFAULT_USER_AGENT
}
response = session.post(LOGIN_PASSWORD_URL + state, data=payload, headers=headers)
if response.status_code != 200:
print(EMAIL_OR_PASSWORD_INVALID_ERROR_MESSAGE)
sys.exit(1)
redirect_url = response.url
parsed_url = urlparse(redirect_url)
query_params = parse_qs(parsed_url.query)
code = query_params.get('code', [None])[0]
if not code:
print("Authorization code not found.")
sys.exit(1)
return code
def get_access_token(session, code):
payload = {
"client_id": CLIENT_ID,
"code": code,
"grant_type": "authorization_code",
"redirect_uri": REDIRECT_URI
}
headers = {
"Content-Type": "application/json",
"User-Agent": DEFAULT_USER_AGENT
}
response = session.post(GET_TOKEN_URL, data=json.dumps(payload), headers=headers)
if response.status_code != 200:
print(GET_ACCESS_TOKEN_ERROR_MESSAGE)
sys.exit(1)
try:
token_response = response.json()
access_token = token_response.get("access_token", None)
if not access_token:
print("Access token not found in the response.")
sys.exit(1)
return access_token
except json.JSONDecodeError:
print("Failed to decode access token response.")
sys.exit(1)
def main():
import getpass
# Prompt user for credentials
username = input("Enter your username (email): ").strip()
password = getpass.getpass("Enter your password: ").strip()
# Initialize session
session = requests.Session()
# Refresh cookies by accessing the logout URL
try:
logout_response = session.get(AUTH0_URL + "/v2/logout", headers={
"User-Agent": DEFAULT_USER_AGENT
})
logout_response.raise_for_status()
except requests.RequestException as e:
print(f"Failed to refresh cookies: {e}")
sys.exit(1)
# Get authorized URL
authorized_url = get_authorized_url(session)
state = extract_state(authorized_url)
# Check username
check_username(session, state, username)
# Check password and get authorization code
code = check_password(session, state, username, password)
# Exchange code for access token
access_token = get_access_token(session, code)
payload = {}
headers = {
"Content-Type": "application/json",
"User-Agent": DEFAULT_USER_AGENT,
"Authorization": f"Bearer {access_token}"
}
try:
dashboard_response = session.post(DASHBOARD_LOGIN_URL, data=json.dumps(payload), headers=headers)
if dashboard_response.status_code != 200:
print(GET_SESSION_KEY_ERROR_MESSAGE)
sys.exit(1)
print("Access Token:", access_token)
except requests.RequestException as e:
print(f"Failed to perform dashboard login: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
一直报错
Failed to refresh cookies: 403 Client Error: Forbidden for url: https://auth0.openai.com/v2/logout