diff --git a/.drone.yml b/.drone.yml index d5467ad..7e10c28 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,7 +7,7 @@ steps: image: python commands: - pip install flake8 - - flake8 pynyaata --ignore=E501 + - flake8 pynyaata - name: docker image: plugins/docker settings: diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..6deafc2 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 120 diff --git a/pynyaata/flarerequests.py b/pynyaata/flarerequests.py index a7e796b..e4ea5ac 100644 --- a/pynyaata/flarerequests.py +++ b/pynyaata/flarerequests.py @@ -5,9 +5,9 @@ from .config import CLOUDPROXY_ENDPOINT class FlareRequests(Session): - def request(self, method, url, params=None, **kwargs): + def request(self, method, url, params=None, data=None, **kwargs): if not CLOUDPROXY_ENDPOINT: - return super().request(method, url, params, **kwargs) + return super().request(method, url, params, data, **kwargs) sessions = post(CLOUDPROXY_ENDPOINT, json={"cmd": "sessions.list"}).json() @@ -22,14 +22,18 @@ class FlareRequests(Session): else: raise RequestException(response) + if params: + url += "&" if len(url.split("?")) > 1 else "?" + url = f"{url}{parse.urlencode(params)}" + post_data = { "cmd": f"request.{method.lower()}", "session": FLARESESSION, "url": url, } - if params: - post_data["postData"] = parse.urlencode(params) + if data: + post_data["postData"] = parse.urlencode(data) try: response = post( @@ -40,12 +44,22 @@ class FlareRequests(Session): solution = response.json() if "solution" in solution: + if "content-type" in solution["solution"]["headers"]: + content_type = solution["solution"]["headers"][ + "content-type" + ].split(";") + if len(content_type) > 1: + charset = content_type[1].split("=") + if len(charset) > 1: + encoding = charset[1] + resolved = Response() - resolved.raw = BytesIO(solution["solution"]["response"].encode()) resolved.status_code = solution["solution"]["status"] resolved.headers = solution["solution"]["headers"] + resolved.raw = BytesIO(solution["solution"]["response"].encode()) resolved.url = url + resolved.encoding = encoding or None resolved.reason = solution["status"] resolved.cookies = solution["solution"]["cookies"]