From 780e4f67ad92bfad01bd5a4ea3c029e6f432db6c Mon Sep 17 00:00:00 2001 From: AkashiCoin Date: Mon, 16 Sep 2024 19:10:34 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(http=5Futils):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=80=E4=BA=9B=E4=B8=8B=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin_store/data_source.py | 3 +- zhenxun/utils/http_utils.py | 62 ++++++++++--------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index 407c53e1..bc4dc5af 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -252,11 +252,10 @@ class ShopManage: ) for _id, success in enumerate(result): if not success: - break + raise Exception("插件依赖文件下载失败") else: logger.debug(f"插件依赖文件列表: {req_paths}", "插件管理") install_requirement(plugin_path) - raise Exception("插件依赖文件下载失败") return True raise Exception("插件下载失败") diff --git a/zhenxun/utils/http_utils.py b/zhenxun/utils/http_utils.py index f45f84ec..2de1c43a 100644 --- a/zhenxun/utils/http_utils.py +++ b/zhenxun/utils/http_utils.py @@ -11,9 +11,9 @@ import httpx import aiofiles from retrying import retry from playwright.async_api import Page -from httpx import Response, ConnectTimeout from nonebot_plugin_alconna import UniMessage from nonebot_plugin_htmlrender import get_browser +from httpx import Response, ConnectTimeout, HTTPStatusError from zhenxun.services.log import logger from zhenxun.configs.config import BotConfig @@ -205,34 +205,36 @@ class AsyncHttpx: path.parent.mkdir(parents=True, exist_ok=True) try: for _ in range(3): - if not stream: - try: - response = await cls.get( - url, - params=params, - headers=headers, - cookies=cookies, - use_proxy=use_proxy, - proxy=proxy, - timeout=timeout, - follow_redirects=follow_redirects, - **kwargs, - ) - response.raise_for_status() - content = response.content - async with aiofiles.open(path, "wb") as wf: - await wf.write(content) - logger.info(f"下载 {url} 成功.. Path:{path.absolute()}") - return True - except (TimeoutError, ConnectTimeout): - pass - else: - if not headers: - headers = get_user_agent() - _proxy = proxy if proxy else cls.proxy if use_proxy else None - if not isinstance(url, list): - url = [url] - for u in url: + if not isinstance(url, list): + url = [url] + for u in url: + if not stream: + try: + response = await cls.get( + u, + params=params, + headers=headers, + cookies=cookies, + use_proxy=use_proxy, + proxy=proxy, + timeout=timeout, + follow_redirects=follow_redirects, + **kwargs, + ) + response.raise_for_status() + content = response.content + async with aiofiles.open(path, "wb") as wf: + await wf.write(content) + logger.info( + f"下载 {url} 成功.. Path:{path.absolute()}" + ) + return True + except (TimeoutError, ConnectTimeout, HTTPStatusError): + pass + else: + if not headers: + headers = get_user_agent() + _proxy = proxy if proxy else cls.proxy if use_proxy else None try: async with httpx.AsyncClient( proxies=_proxy, # type: ignore @@ -277,7 +279,7 @@ class AsyncHttpx: f"Path:{path.absolute()}" ) return True - except (TimeoutError, ConnectTimeout): + except (TimeoutError, ConnectTimeout, HTTPStatusError): pass else: logger.error(f"下载 {url} 下载超时.. Path:{path.absolute()}")