FlareSolverr v3

This commit is contained in:
Michel Roux 2023-01-05 15:23:22 +01:00
parent 54a36adebf
commit 589ea325de

View File

@ -2,7 +2,7 @@ from io import BytesIO
from os import getenv from os import getenv
from urllib import parse from urllib import parse
from requests import RequestException, Response, Session, post from requests import Response, Session, post
CLOUDPROXY_ENDPOINT = getenv("CLOUDPROXY_ENDPOINT") CLOUDPROXY_ENDPOINT = getenv("CLOUDPROXY_ENDPOINT")
@ -13,67 +13,42 @@ class FlareRequests(Session):
if not CLOUDPROXY_ENDPOINT: if not CLOUDPROXY_ENDPOINT:
return super().request(method, url, params, data, **kwargs) return super().request(method, url, params, data, **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)
if params: if params:
url += "&" if len(url.split("?")) > 1 else "?" url += "&" if len(url.split("?")) > 1 else "?"
url = f"{url}{parse.urlencode(params)}" url = f"{url}{parse.urlencode(params)}"
post_data = { post_data = {
"cmd": f"request.{method.lower()}", "cmd": f"request.{method.lower()}",
"session": FLARESESSION,
"url": url, "url": url,
} }
if data: if data:
post_data["postData"] = parse.urlencode(data) post_data["postData"] = parse.urlencode(data)
try: response = post(
response = post( CLOUDPROXY_ENDPOINT,
CLOUDPROXY_ENDPOINT, json=post_data,
json=post_data, )
)
solution = response.json() content = response.json()
if "solution" in solution: if "solution" in content:
if "content-type" in solution["solution"]["headers"]: solution = content["solution"]
content_type = solution["solution"]["headers"][ if "content-type" in solution["headers"]:
"content-type" content_type = solution["headers"]["content-type"].split(";")
].split(";") if len(content_type) > 1:
if len(content_type) > 1: charset = content_type[1].split("=")
charset = content_type[1].split("=") if len(charset) > 1:
if len(charset) > 1: encoding = charset[1]
encoding = charset[1]
resolved = Response() resolved = Response()
resolved.status_code = solution["solution"]["status"] resolved.status_code = solution["status"]
resolved.headers = solution["solution"]["headers"] resolved.headers = solution["headers"]
resolved.raw = BytesIO(solution["solution"]["response"].encode()) resolved.raw = BytesIO(solution["response"].encode())
resolved.url = url resolved.url = url
resolved.encoding = encoding or None resolved.encoding = encoding or None
resolved.reason = solution["status"] resolved.reason = content["status"]
resolved.cookies = solution["solution"]["cookies"] resolved.cookies = solution["cookies"]
return resolved return resolved
raise RequestException(response)
except RequestException:
session = post(
CLOUDPROXY_ENDPOINT,
json={"cmd": "sessions.destroy", "session": FLARESESSION},
)
raise RequestException(solution)