mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-09-28 16:20:56 +08:00
✨ feat(http_utils): 添加可选的 accept_status_codes 参数以支持自定义状态码处理 (#2096)
- 在 AsyncHttpx 类中,新增 accept_status_codes 参数,允许用户指定哪些 HTTP 状态码不视为错误。 - 更新了单次请求的逻辑,以便在响应状态码符合 accept_status_codes 时不调用 raise_for_status 方法。 ✨ feat(message): 增加随机失败提示消息功能 - 在 MessageUtils 类中,添加可爱风格的失败提示消息列表和获取随机消息的方法。 ✨ feat(github_utils): 引入动态查询外部插件分组的功能 - 在 AliyunFileInfo 类中,新增 list_group_repositories 方法以列出分组下的所有仓库,并实现通过仓库名称获取仓库ID的逻辑。 ✨ feat(virtual_env_package_manager): 增加清理 requirements 文件的功能 - 新增 _clean_requirements_file 方法,清理 requirements 文件中的非ASCII注释,避免 Windows 上 pip 使用 GBK 编码读取 UTF-8 文件时出错。 ✨ feat(repo_utils): 优化阿里云仓库 URL 处理逻辑 - 更新 prepare_aliyun_url 方法以支持指定分组名称,并新增 get_aliyun_group_for_repo 方法以获取仓库所属的阿里云分组名。
This commit is contained in:
@@ -219,8 +219,12 @@ class AsyncHttpx:
|
||||
) -> Response:
|
||||
"""
|
||||
执行单次HTTP请求的私有方法,内置了默认的重试逻辑。
|
||||
accept_status_codes: 若提供,这些状态码不视为错误,不调用 raise_for_status。
|
||||
"""
|
||||
client_kwargs, request_kwargs = cls._split_kwargs(kwargs)
|
||||
accept_status_codes: Sequence[int] | None = request_kwargs.pop(
|
||||
"accept_status_codes", None
|
||||
)
|
||||
|
||||
async with cls._get_active_client_context(
|
||||
client=client, **client_kwargs
|
||||
@@ -228,7 +232,11 @@ class AsyncHttpx:
|
||||
response = await cls()._execute_request_inner(
|
||||
active_client, method, url, **request_kwargs
|
||||
)
|
||||
response.raise_for_status()
|
||||
if (
|
||||
accept_status_codes is None
|
||||
or response.status_code not in accept_status_codes
|
||||
):
|
||||
response.raise_for_status()
|
||||
return response
|
||||
|
||||
@classmethod
|
||||
@@ -292,6 +300,7 @@ class AsyncHttpx:
|
||||
*,
|
||||
follow_redirects: bool = True,
|
||||
check_status_code: int | None = None,
|
||||
accept_status_codes: Sequence[int] | None = None,
|
||||
client: AsyncClient | None = None,
|
||||
**kwargs,
|
||||
) -> Response:
|
||||
@@ -301,6 +310,8 @@ class AsyncHttpx:
|
||||
url: 单个请求 URL 或一个 URL 列表。
|
||||
follow_redirects: 是否跟随重定向。
|
||||
check_status_code: (可选) 若提供,将检查响应状态码是否匹配,否则抛出异常。
|
||||
accept_status_codes: (可选) 这些状态码不视为错误,
|
||||
如 (302,) 用于接受重定向响应。
|
||||
client: (可选) 指定一个活动的HTTP客户端实例。若提供,则忽略
|
||||
`**kwargs`中的客户端配置。
|
||||
**kwargs: 其他所有传递给 httpx.get 的参数 (如 `params`, `headers`,
|
||||
@@ -316,6 +327,8 @@ class AsyncHttpx:
|
||||
|
||||
async def worker(current_url: str, **worker_kwargs) -> Response:
|
||||
logger.info(f"开始获取 {current_url}..", "AsyncHttpx:get")
|
||||
if accept_status_codes is not None:
|
||||
worker_kwargs["accept_status_codes"] = accept_status_codes
|
||||
response = await cls._single_request(
|
||||
"GET", current_url, follow_redirects=follow_redirects, **worker_kwargs
|
||||
)
|
||||
@@ -342,11 +355,20 @@ class AsyncHttpx:
|
||||
|
||||
@classmethod
|
||||
async def post(
|
||||
cls, url: str | list[str], *, client: AsyncClient | None = None, **kwargs
|
||||
cls,
|
||||
url: str | list[str],
|
||||
*,
|
||||
accept_status_codes: Sequence[int] | None = None,
|
||||
client: AsyncClient | None = None,
|
||||
**kwargs,
|
||||
) -> Response:
|
||||
"""发送 POST 请求,并返回第一个成功的响应。"""
|
||||
"""发送 POST 请求,并返回第一个成功的响应。
|
||||
accept_status_codes: (可选) 这些状态码不视为错误,如 (302,) 用于接受重定向响应。
|
||||
"""
|
||||
|
||||
async def worker(current_url: str, **worker_kwargs) -> Response:
|
||||
if accept_status_codes is not None:
|
||||
worker_kwargs["accept_status_codes"] = accept_status_codes
|
||||
return await cls._single_request("POST", current_url, **worker_kwargs)
|
||||
|
||||
return await cls._execute_with_fallbacks(url, worker, client=client, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user