- commit
- 32ba44b6c59bd586b886056cdb02356e68ae0f34
- parent
- c4d5f995b2b03425b5640401ad71b71e97f05052
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2026-06-01 05:32
implement js challenge
Diffstat
| M | neddit.py | 39 | ++++++++++++++++++++++++++++++++++++++- |
1 files changed, 38 insertions, 1 deletions
diff --git a/neddit.py b/neddit.py
@@ -15,6 +15,7 @@ BASE_DIR = Path(__file__).parent 15 15 HEADERS = { 16 16 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0', 17 17 } -1 18 COOKIES = {} 18 19 19 20 env = jinja2.Environment( 20 21 loader=jinja2.FileSystemLoader(BASE_DIR / 'templates'), @@ -95,14 +96,50 @@ def raise_for_status(response): 95 96 response.raise_for_status() 96 97 97 9898 -1 async def fetch(url, **params):-1 99 async def fetch_cookie(): -1 100 async with aiohttp.ClientSession() as session: -1 101 async with session.get( -1 102 'https://www.reddit.com/', -1 103 headers=HEADERS, -1 104 ssl=ssl.create_default_context(), -1 105 ) as response: -1 106 raise_for_status(response) -1 107 text = await response.text() -1 108 -1 109 m1 = re.search(r'name="token" value="([^"]*)"', text) -1 110 m2 = re.search(r'\(async e=>e\+e\)\("([^"]*)"\)', text) -1 111 params = { -1 112 'solution': m2[1] + m2[1], -1 113 'js_challenge': 1, -1 114 'token': m1[1], -1 115 'jsc_orig_r': '', -1 116 } -1 117 -1 118 async with session.get( -1 119 'https://www.reddit.com/', -1 120 headers=HEADERS, -1 121 params=params, -1 122 ssl=ssl.create_default_context(), -1 123 ) as response: -1 124 raise_for_status(response) -1 125 -1 126 for c in session.cookie_jar: -1 127 if c.key in ['loid', 'token_v2']: -1 128 COOKIES[c.key] = c.value -1 129 -1 130 -1 131 async def fetch(url, is_retry=False, **params): 99 132 async with aiohttp.ClientSession() as session: 100 133 async with session.get( 101 134 url, 102 135 headers=HEADERS, -1 136 cookies=COOKIES, 103 137 params={**params, 'raw_json': 1}, 104 138 ssl=ssl.create_default_context(), 105 139 ) as response: -1 140 if response.status == 403 and not is_retry: -1 141 await fetch_cookie() -1 142 return await fetch(url, is_retry=True, **params) 106 143 raise_for_status(response) 107 144 return await response.json() 108 145