bing-chat-api / networks /cookies_constructor.py
Hansimov's picture
:gem: [Feature] Request cookies to bypass challenge
70c1e23
raw
history blame
3.6 kB
import json
import requests
from datetime import datetime
from pathlib import Path
from utils.logger import logger
class CookiesConstructor:
bypass_url = "https://zklcdc-go-bingai-pass.hf.space"
def __init__(self):
self.cookies = {}
self.secrets_path = Path(__file__).parents[1] / "secrets.json"
self.created_datetime_format = "%Y-%m-%d %H:%M:%S"
def create_secrets_json(self):
if not self.secrets_path.exists():
self.secrets_path.parent.mkdir(parents=True, exist_ok=True)
with open(self.secrets_path, "w") as wf:
json.dump({}, wf)
def is_local_cookies_valid(self):
self.create_secrets_json()
if self.secrets_path.exists():
with open(self.secrets_path, "r") as f:
secrets = json.load(f)
if secrets.get("cookies"):
cookies = secrets["cookies"]
cookies_str = cookies.get("cookies_str")
cookies_created_datetime = datetime.strptime(
cookies.get("created_time"), self.created_datetime_format
)
datetime_now = datetime.now()
# if cookies created more than 12 hours, then it's invalid
self.cookies_created_seconds = (
datetime_now - cookies_created_datetime
).seconds
if self.cookies_created_seconds < 12 * 60 * 60:
self.cookies_str = cookies_str
self.cookies_created_datetime = cookies_created_datetime
return True
else:
return False
return False
def requests_cookies(self):
if self.is_local_cookies_valid():
logger.success(
f"Local Cookies Used: {self.cookies_created_datetime} "
f"({round(self.cookies_created_seconds/60/60,2)} hours ago)"
)
return
requests_body = {"cookies": ""}
try:
res = requests.post(
self.bypass_url,
json=requests_body,
timeout=15,
)
data = res.json()
cookies_str = data["result"]["cookies"]
cookies_snapshot = data["result"]["snapshot"]
logger.note(f"Get Cookies: {cookies_str}")
if cookies_str:
with open(self.secrets_path, "r") as rf:
secrets = json.load(rf)
secrets["cookies"] = {
"cookies_str": cookies_str,
"created_time": datetime.now().strftime(
self.created_datetime_format
),
"snapshot": self.bypass_url + cookies_snapshot,
}
with open(self.secrets_path, "w") as wf:
json.dump(secrets, wf)
except Exception as e:
cookies_str = ""
logger.err(e)
self.cookies_str = cookies_str
def cookies_str_to_dict(self):
cookie_items = self.cookies_str.split(";")
for cookie_item in cookie_items:
if not cookie_item:
continue
cookie_key, cookie_value = cookie_item.split("=", 1)
self.cookies[cookie_key.strip()] = cookie_value.strip()
logger.success(f"Cookies: {self.cookies}")
def construct(self):
self.requests_cookies()
self.cookies_str_to_dict()
if __name__ == "__main__":
cookies_constructor = CookiesConstructor()
cookies_constructor.construct()