🐞 fix(http_utils): 修复一些下载问题

This commit is contained in:
AkashiCoin 2024-09-16 19:10:34 +08:00
parent c4f98e3505
commit 780e4f67ad
2 changed files with 33 additions and 32 deletions

View File

@ -252,11 +252,10 @@ class ShopManage:
) )
for _id, success in enumerate(result): for _id, success in enumerate(result):
if not success: if not success:
break raise Exception("插件依赖文件下载失败")
else: else:
logger.debug(f"插件依赖文件列表: {req_paths}", "插件管理") logger.debug(f"插件依赖文件列表: {req_paths}", "插件管理")
install_requirement(plugin_path) install_requirement(plugin_path)
raise Exception("插件依赖文件下载失败")
return True return True
raise Exception("插件下载失败") raise Exception("插件下载失败")

View File

@ -11,9 +11,9 @@ import httpx
import aiofiles import aiofiles
from retrying import retry from retrying import retry
from playwright.async_api import Page from playwright.async_api import Page
from httpx import Response, ConnectTimeout
from nonebot_plugin_alconna import UniMessage from nonebot_plugin_alconna import UniMessage
from nonebot_plugin_htmlrender import get_browser from nonebot_plugin_htmlrender import get_browser
from httpx import Response, ConnectTimeout, HTTPStatusError
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.configs.config import BotConfig from zhenxun.configs.config import BotConfig
@ -205,34 +205,36 @@ class AsyncHttpx:
path.parent.mkdir(parents=True, exist_ok=True) path.parent.mkdir(parents=True, exist_ok=True)
try: try:
for _ in range(3): for _ in range(3):
if not stream: if not isinstance(url, list):
try: url = [url]
response = await cls.get( for u in url:
url, if not stream:
params=params, try:
headers=headers, response = await cls.get(
cookies=cookies, u,
use_proxy=use_proxy, params=params,
proxy=proxy, headers=headers,
timeout=timeout, cookies=cookies,
follow_redirects=follow_redirects, use_proxy=use_proxy,
**kwargs, proxy=proxy,
) timeout=timeout,
response.raise_for_status() follow_redirects=follow_redirects,
content = response.content **kwargs,
async with aiofiles.open(path, "wb") as wf: )
await wf.write(content) response.raise_for_status()
logger.info(f"下载 {url} 成功.. Path{path.absolute()}") content = response.content
return True async with aiofiles.open(path, "wb") as wf:
except (TimeoutError, ConnectTimeout): await wf.write(content)
pass logger.info(
else: f"下载 {url} 成功.. Path{path.absolute()}"
if not headers: )
headers = get_user_agent() return True
_proxy = proxy if proxy else cls.proxy if use_proxy else None except (TimeoutError, ConnectTimeout, HTTPStatusError):
if not isinstance(url, list): pass
url = [url] else:
for u in url: if not headers:
headers = get_user_agent()
_proxy = proxy if proxy else cls.proxy if use_proxy else None
try: try:
async with httpx.AsyncClient( async with httpx.AsyncClient(
proxies=_proxy, # type: ignore proxies=_proxy, # type: ignore
@ -277,7 +279,7 @@ class AsyncHttpx:
f"Path{path.absolute()}" f"Path{path.absolute()}"
) )
return True return True
except (TimeoutError, ConnectTimeout): except (TimeoutError, ConnectTimeout, HTTPStatusError):
pass pass
else: else:
logger.error(f"下载 {url} 下载超时.. Path{path.absolute()}") logger.error(f"下载 {url} 下载超时.. Path{path.absolute()}")