diff --git a/pynyaata/flarerequests.py b/pynyaata/flarerequests.py index 1677799..95e05ef 100644 --- a/pynyaata/flarerequests.py +++ b/pynyaata/flarerequests.py @@ -8,8 +8,22 @@ class FlareRequests(Session): if not CLOUDPROXY_ENDPOINT: return super().request(method, url, params, timeout=timeout, **kwargs) + sessions = post(CLOUDPROXY_ENDPOINT, json={"cmd": "sessions.list"}).json() + + if "sessions" in sessions and len(sessions["sessions"]) > 0: + FLARESESSION = sessions["sessions"][0] + else: + response = post(CLOUDPROXY_ENDPOINT, json={"cmd": "sessions.create"}) + session = response.json() + + if "session" in session: + FLARESESSION = session["session"] + else: + raise RequestException(response) + post_data = { "cmd": f"request.{method.lower()}", + "session": FLARESESSION, "url": url, "maxTimeout": timeout * 1000, } @@ -17,23 +31,31 @@ class FlareRequests(Session): if params: post_data["postData"] = parse.urlencode(params) - response = post( - CLOUDPROXY_ENDPOINT, - json=post_data, - ) + try: + response = post( + CLOUDPROXY_ENDPOINT, + json=post_data, + ) - solution = response.json() + solution = response.json() - if "solution" in solution: - resolved = Response() + 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"] + 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 + return resolved - raise RequestException(response) + raise RequestException(response) + except RequestException: + session = post( + CLOUDPROXY_ENDPOINT, + json={"cmd": "sessions.destroy", "session": FLARESESSION}, + ) + + raise RequestException(solution)