from urllib import parse from requests import RequestException, Response, Session, post from .config import CLOUDPROXY_ENDPOINT, REQUESTS_TIMEOUT class FlareRequests(Session): def request(self, method, url, params=None, timeout=REQUESTS_TIMEOUT, **kwargs): if not CLOUDPROXY_ENDPOINT: return super().request(method, url, params, timeout=timeout, **kwargs) post_data = { "cmd": f"request.{method.lower()}", "url": url, "maxTimeout": timeout * 1000, } if params: post_data["postData"] = parse.urlencode(params) response = post( CLOUDPROXY_ENDPOINT, json=post_data, ) solution = response.json() if "solution" in solution: resolved = Response() resolved.raw = solution["solution"]["response"] resolved.status_code = solution["solution"]["status"] resolved.headers = solution["solution"]["headers"] resolved.url = url resolved.reason = solution["status"] resolved.cookies = solution["solution"]["cookies"] return resolved raise RequestException(response)