fix(download): 修复空代理导致TLS异常并增加直连降级

This commit is contained in:
root committed 2026-02-17 17:32:48 +08:00
1 parent 33332aa71f
commit f4a3ada5ee
1 file changed
+27 -18
+27 -18
View File
@@ -48,12 +48,10 @@ class AssetsDownloadReverse:
url = f"{DOWNLOAD_API}{file_path}"
# Get proxies
base_proxy = get_config("proxy.base_proxy_url")
assert_proxy = get_config("proxy.asset_proxy_url")
if assert_proxy:
proxies = {"http": assert_proxy, "https": assert_proxy}
else:
proxies = {"http": base_proxy, "https": base_proxy}
base_proxy = (get_config("proxy.base_proxy_url") or "").strip()
asset_proxy = (get_config("proxy.asset_proxy_url") or "").strip()
proxy_url = asset_proxy or base_proxy
proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else None
# Guess content type by extension for Accept/Sec-Fetch-Dest
content_type = _CONTENT_TYPES.get(Path(urllib.parse.urlparse(file_path).path).suffix.lower())
@@ -77,17 +75,18 @@ class AssetsDownloadReverse:
timeout = get_config("asset.download_timeout")
browser = get_config("proxy.browser")
async def _do_request():
response = await session.get(
url,
headers=headers,
proxies=proxies,
timeout=timeout,
allow_redirects=True,
impersonate=browser,
stream=True,
)
async def _single_get(*, use_impersonate: bool, use_proxy: bool):
kwargs = {
"headers": headers,
"timeout": timeout,
"allow_redirects": True,
"stream": True,
}
if use_proxy and proxies:
kwargs["proxies"] = proxies
if use_impersonate and browser:
kwargs["impersonate"] = browser
response = await session.get(url, **kwargs)
if response.status_code != 200:
logger.error(
f"AssetsDownloadReverse: Download failed, {response.status_code}",
@@ -97,9 +96,19 @@ class AssetsDownloadReverse:
message=f"AssetsDownloadReverse: Download failed, {response.status_code}",
details={"status": response.status_code},
)
return response
async def _do_request():
try:
return await _single_get(use_impersonate=True, use_proxy=True)
except Exception as first_err:
# TLS/握手类问题常出现在代理或浏览器指纹组合,降级直连重试一次。
logger.warning(
"AssetsDownloadReverse primary request failed, fallback direct: "
f"error={first_err}"
)
return await _single_get(use_impersonate=False, use_proxy=False)
return await retry_on_status(_do_request)
except Exception as e: