Skip to content

Commit

Permalink
prevent unhandled exception on Cloudflare challenges (#868)
Browse files Browse the repository at this point in the history
The relatively new v2 challenges aren't supported (*), but retrying
often enough may yield a v1 challenge which can be solved.

(*) and probably never will. They are far too complicated to do without
a real browser.
  • Loading branch information
mikf committed Jul 8, 2020
1 parent 6e2af9a commit dbf841e
Showing 1 changed file with 16 additions and 13 deletions.
29 changes: 16 additions & 13 deletions gallery_dl/cloudflare.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,11 @@ def solve_challenge(session, response, kwargs):
"""Solve Cloudflare challenge and get cfclearance cookie"""
parsed = urllib.parse.urlsplit(response.url)
root = parsed.scheme + "://" + parsed.netloc

page = response.text
try:
params = {"ray": text.extract(page, '?ray=', '"')[0]}

url = root + "/cdn-cgi/images/trace/jschal/nojs/transparent.gif"
session.request("GET", url, params=params)

url = root + "/cdn-cgi/images/trace/jschal/js/nocookie/transparent.gif"
session.request("GET", url, params=params)
except Exception:
pass

cf_kwargs = {}
headers = cf_kwargs["headers"] = collections.OrderedDict()
params = cf_kwargs["data"] = collections.OrderedDict()
url = root + text.unescape(text.extract(page, 'action="', '"')[0])
headers["Referer"] = response.url

form = text.extract(page, 'id="challenge-form"', '</form>')[0]
Expand All @@ -58,12 +46,27 @@ def solve_challenge(session, response, kwargs):
if not name:
continue
if name == "jschl_answer":
value = solve_js_challenge(page, parsed.netloc)
try:
value = solve_js_challenge(page, parsed.netloc)
except Exception:
return response, None, None
else:
value = element.attrib.get("value")
params[name] = value

try:
params = {"ray": text.extract(page, '?ray=', '"')[0]}

url = root + "/cdn-cgi/images/trace/jschal/nojs/transparent.gif"
session.request("GET", url, params=params)

url = root + "/cdn-cgi/images/trace/jschal/js/nocookie/transparent.gif"
session.request("GET", url, params=params)
except Exception:
pass

time.sleep(4)
url = root + text.unescape(text.extract(page, 'action="', '"')[0])
cf_response = session.request("POST", url, **cf_kwargs)

if cf_response.history:
Expand Down

0 comments on commit dbf841e

Please sign in to comment.