import requests from utils.enums import StatusCode from utils.logger_manager import logger from utils.utils import is_termux class HttpClient: def __init__(self, proxy=None, cookies=None): self.req = None self.req_stream = requests self.proxy = proxy self.cookies = cookies self.headers = { "Sec-Ch-Ua": '"Not/A)Brand";v="8", "Chromium";v="126"', "Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Platform": '"Windows"', "Accept-Language": "en-US", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,application/json,text/plain,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Sec-Fetch-Site": "none", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-User": "?1", "Sec-Fetch-Dest": "document", "Priority": "u=0, i", "Referer": "https://www.tiktok.com/", "Origin": "https://www.tiktok.com", } self.configure_session() def configure_session(self) -> None: self.req_stream = requests.Session() if is_termux(): self.req = self.req_stream else: from curl_cffi import Session, CurlSslVersion, CurlOpt self.req = Session( impersonate="chrome136", http_version="v1", curl_options={CurlOpt.SSLVERSION: CurlSslVersion.TLSv1_2}, ) self.req.headers.update(self.headers) self.req_stream.headers.update(self.headers) if self.cookies is not None: self.req.cookies.update(self.cookies) self.req_stream.cookies.update(self.cookies) self.check_proxy() def check_proxy(self) -> None: if self.proxy is None: return logger.info(f"Testing {self.proxy}...") proxies = {"http": self.proxy, "https": self.proxy} response = requests.get("https://ifconfig.me/ip", proxies=proxies, timeout=10) if response.status_code == StatusCode.OK: self.req.proxies.update(proxies) logger.info("Proxy set up successfully")