Commit 350f574
Changed files (1)
src/networking.py
@@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
import asyncio
+import contextlib
import json
import re
from pathlib import Path
@@ -408,23 +409,21 @@ async def flatten_rediercts(texts: str | None = None, pattern: str | None = None
return texts
# parse redirect
headers = {"user-agent": UA.TELEGRAM} if headers is None else headers
- try:
- new_url = https_url(url)
+ rediercted_url = https_url(url)
+ with contextlib.suppress(Exception):
if method == "HEAD":
async with AsyncClient(http2=True, proxy=proxy, follow_redirects=True, event_hooks={"request": [log_req], "response": [log_resp]}) as hx:
- resp = await hx.head(new_url, headers=headers, timeout=3)
+ resp = await hx.head(https_url(url), headers=headers, timeout=3)
+ rediercted_url = str(resp.url)
elif method == "GET":
status_code = 302
while str(status_code).startswith("3"):
async with AsyncClient(http2=True, proxy=proxy, follow_redirects=False, event_hooks={"request": [log_req], "response": [log_resp]}) as hx:
- resp = await hx.get(new_url, headers=headers, timeout=3)
+ resp = await hx.get(rediercted_url, headers=headers, timeout=3)
status_code = resp.status_code
- new_url = resp.headers.get("Location", new_url)
- except Exception as e:
- logger.error(f"Failed to parse redirect for {url}: {e}")
- return texts
- rediercted_url = str(resp.url) # type: ignore
- logger.info(f"Flatten redirect: {url} -> {rediercted_url}")
+ rediercted_url = resp.headers.get("Location", rediercted_url)
+ if url != rediercted_url:
+ logger.info(f"Flatten redirect: {url} -> {rediercted_url}")
return texts.replace(url, rediercted_url)