feat(v2.4.0): 新增 E_BLOCKED 错误码——细分 fetch 403 反爬拦截
真实环境问题: 抓取被墙/反爬站点 (如 baike.baidu.com) 返回 403 时, classify_error 统一归为 E_AUTH, AI Agent 会误判为凭证问题而做无效的 认证重试。被封锁不是认证失败。 改动: - common.py: 新增 E_BLOCKED 错误码 + recovery_hint (提示换 URL/镜像/ 用 Wayback 兜底/--exclude-domain); 新增 classify_fetch_error() 与 _extract_status_code(): fetch 场景 403→E_BLOCKED, 401→E_AUTH, 其余委托 classify_error (搜索场景 403 仍为 E_AUTH, 不变) - fetch.py main(): 错误路径改用 classify_fetch_error (替代 classify_error) - search.py: fetch_page 与 fetch_top_results 线程错误路径同样切换 - 新增 11 个测试 (test_v240_blocked_code.py), 全量 572 测试通过 - 真实环境验证: baike 403 → E_BLOCKED, 正常站点不受影响 - 文档同步 (SKILL.md/README.md 错误码表, 版本号 2.4.0)
This commit is contained in:
+2
-2
@@ -54,7 +54,7 @@ from common import (
|
||||
build_auth_headers,
|
||||
build_browser_headers,
|
||||
build_wayback_url,
|
||||
classify_error,
|
||||
classify_fetch_error,
|
||||
compute_backoff_delay,
|
||||
detect_charset,
|
||||
force_utf8_stdout,
|
||||
@@ -1346,7 +1346,7 @@ Examples:
|
||||
# v2.1.0: Wayback Machine 兜底
|
||||
# 触发条件:兜底启用 + (错误可恢复 OR 命中被墙站点)
|
||||
fatal_error = str(e) if str(e) else e.__class__.__name__
|
||||
fatal_error_code = classify_error(e)
|
||||
fatal_error_code = classify_fetch_error(e, status_code=status_code)
|
||||
fatal_status_code = status_code
|
||||
error_msg = fatal_error
|
||||
if fallback_enabled and (should_try_wayback(error_msg) or hard_blocked):
|
||||
|
||||
Reference in New Issue
Block a user