cca / chatgpt /fp.py
sanbo
update sth. at 2025-01-20 14:08:58
08ca036
import json
import random
import uuid
import ua_generator
from ua_generator.data.version import VersionRange
from ua_generator.options import Options
import utils.globals as globals
from utils import configs
def get_fp(req_token):
fp = globals.fp_map.get(req_token, {})
if fp and fp.get("user-agent") and fp.get("impersonate"):
if "proxy_url" in fp.keys() and (fp["proxy_url"] is None or fp["proxy_url"] not in configs.proxy_url_list):
fp["proxy_url"] = random.choice(configs.proxy_url_list) if configs.proxy_url_list else None
globals.fp_map[req_token] = fp
with open(globals.FP_FILE, "w", encoding="utf-8") as f:
json.dump(globals.fp_map, f, indent=4)
if globals.impersonate_list and "impersonate" in fp.keys() and fp["impersonate"] not in globals.impersonate_list:
fp["impersonate"] = random.choice(globals.impersonate_list)
globals.fp_map[req_token] = fp
with open(globals.FP_FILE, "w", encoding="utf-8") as f:
json.dump(globals.fp_map, f, indent=4)
if configs.user_agents_list and "user-agent" in fp.keys() and fp["user-agent"] not in configs.user_agents_list:
fp["user-agent"] = random.choice(configs.user_agents_list)
globals.fp_map[req_token] = fp
with open(globals.FP_FILE, "w", encoding="utf-8") as f:
json.dump(globals.fp_map, f, indent=4)
fp = {k.lower(): v for k, v in fp.items()}
return fp
else:
options = Options(version_ranges={
'chrome': VersionRange(min_version=124),
'edge': VersionRange(min_version=124),
})
ua = ua_generator.generate(
device=configs.device_tuple if configs.device_tuple else ('desktop'),
browser=configs.browser_tuple if configs.browser_tuple else ('chrome', 'edge', 'firefox', 'safari'),
platform=configs.platform_tuple if configs.platform_tuple else ('windows', 'macos'),
options=options
)
fp = {
"user-agent": ua.text if not configs.user_agents_list else random.choice(configs.user_agents_list),
"impersonate": random.choice(globals.impersonate_list),
"proxy_url": random.choice(configs.proxy_url_list) if configs.proxy_url_list else None,
"oai-device-id": str(uuid.uuid4())
}
if ua.device == "desktop" and ua.browser in ("chrome", "edge"):
fp["sec-ch-ua-platform"] = ua.ch.platform
fp["sec-ch-ua"] = ua.ch.brands
fp["sec-ch-ua-mobile"] = ua.ch.mobile
if not req_token:
return fp
else:
globals.fp_map[req_token] = fp
with open(globals.FP_FILE, "w", encoding="utf-8") as f:
json.dump(globals.fp_map, f, indent=4)
return fp