diff options
| author | 2019-12-25 19:40:28 -0500 | |
|---|---|---|
| committer | 2019-12-25 19:40:28 -0500 | |
| commit | f9a1a9dcb7df977eeac9544786df9c0b93795815 (patch) | |
| tree | 8cb69cf7685da8d7e4deb7dc1d6b209098e1ddfb /gallery_dl/cloudflare.py | |
| parent | 0c73e982fa596da07f23b377621ab894a9e64884 (diff) | |
New upstream version 1.12.1upstream/1.12.1
Diffstat (limited to 'gallery_dl/cloudflare.py')
| -rw-r--r-- | gallery_dl/cloudflare.py | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/gallery_dl/cloudflare.py b/gallery_dl/cloudflare.py index b9bf32d..6e23c83 100644 --- a/gallery_dl/cloudflare.py +++ b/gallery_dl/cloudflare.py @@ -35,10 +35,11 @@ def solve_challenge(session, response, kwargs): cf_kwargs = {} headers = cf_kwargs["headers"] = collections.OrderedDict() - params = cf_kwargs["params"] = collections.OrderedDict() + params = cf_kwargs["data"] = collections.OrderedDict() page = response.text - params["s"] = text.extract(page, 'name="s" value="', '"')[0] + url = root + text.extract(page, 'action="', '"')[0] + params["r"] = text.extract(page, 'name="r" value="', '"')[0] params["jschl_vc"] = text.extract(page, 'name="jschl_vc" value="', '"')[0] params["pass"] = text.extract(page, 'name="pass" value="', '"')[0] params["jschl_answer"] = solve_js_challenge(page, parsed.netloc) @@ -46,12 +47,14 @@ def solve_challenge(session, response, kwargs): time.sleep(4) - url = root + "/cdn-cgi/l/chk_jschl" cf_kwargs["allow_redirects"] = False - cf_response = session.request("GET", url, **cf_kwargs) + cf_response = session.request("POST", url, **cf_kwargs) - location = cf_response.headers.get("Location") - if not location: + cookies = { + cookie.name: cookie.value + for cookie in cf_response.cookies + } + if not cookies: import logging log = logging.getLogger("cloudflare") rtype = "CAPTCHA" if is_captcha(cf_response) else "Unexpected" @@ -60,18 +63,9 @@ def solve_challenge(session, response, kwargs): log.debug("Content:\n%s", cf_response.text) raise exception.StopExtraction() - if location[0] == "/": - location = root + location - else: - location = re.sub(r"(https?):/(?!/)", r"\1://", location) - - for cookie in cf_response.cookies: - if cookie.name == "cf_clearance": - return location, cookie.domain, { - cookie.name: cookie.value, - "__cfduid" : response.cookies.get("__cfduid", ""), - } - return location, "", {} + domain = next(iter(cf_response.cookies)).domain + cookies["__cfduid"] = response.cookies.get("__cfduid", "") + return cf_response, domain, cookies def solve_js_challenge(page, netloc): @@ -110,8 +104,7 @@ def solve_js_challenge(page, netloc): solution += len(netloc) if ".toFixed(" in expr: # trim solution to 10 decimal places - # and strip trailing zeros - solution = "{:.10f}".format(solution).rstrip("0") + solution = "{:.10f}".format(solution) return solution |
