feat(v2.2.1): 修复 Brotli 乱码 + 缓存治理 + 多页聚合 + 研究模式增强
核心修复(v2.2.1): - 修复 Brotli 乱码 bug: build_browser_headers 智能声明 Accept-Encoding, 仅在 brotli 可用时才声明 br; fetch.py 双路径 br 解压(requests + stdlib) 此前 Chrome/Edge UA 抓取 example.com 等返回 br 的站点输出乱码 v2.2.0 新功能: - main() 拆分为 _handle_verify/_handle_research/_handle_batch/_handle_single - --cache-max-size MB: 缓存大小上限 + LRU 淘汰(默认 100MB) - --pages N: 多页聚合 + 跨页去重 - --research 跨角度合并: 新增 merged_results 字段 - --stream / --progress: JSON Lines 流式输出 + request_id 贯穿 - --dry-run / --save-config / --log-format json - --similarity-dedup / --throttle-* 参数化 - 15-UA 池 + PDF/docx 解析 + error_code 字段 文档与测试: - SKILL.md: 版本号唯一(元数据),删除版本标记干扰 - README.md: 测试数量 539 -> 544 - 544 passed (新增 5 个 Content-Encoding 解压测试)
This commit is contained in:
@@ -150,9 +150,22 @@ def test_build_headers_includes_accept_language():
|
||||
|
||||
|
||||
def test_build_headers_includes_accept_encoding():
|
||||
"""Accept-Encoding 必须存在;Firefox 不发 br。"""
|
||||
"""Accept-Encoding 必须存在;Firefox 不发 br;Chrome/Edge 仅在
|
||||
本机安装了 brotli 解压器时才声明 br(v2.2.1 智能声明)。
|
||||
|
||||
未安装 brotli 时声明 br 会导致服务器返回 br 压缩字节而 requests
|
||||
无法解压 → 全页乱码。这是 fetch.py 真实环境的 bug 修复。
|
||||
"""
|
||||
# 导入 common 的 brotli 检测状态
|
||||
from common import _HAS_BROTLI
|
||||
|
||||
chrome_headers = build_browser_headers(FALLBACK_UAS[0])
|
||||
assert "br" in chrome_headers["Accept-Encoding"]
|
||||
# Chrome/Edge:根据 brotli 可用性决定是否声明 br
|
||||
if _HAS_BROTLI:
|
||||
assert "br" in chrome_headers["Accept-Encoding"]
|
||||
else:
|
||||
assert "br" not in chrome_headers["Accept-Encoding"]
|
||||
assert "gzip" in chrome_headers["Accept-Encoding"]
|
||||
|
||||
firefox_ua = next(ua for ua in FALLBACK_UAS if "Firefox/" in ua)
|
||||
firefox_headers = build_browser_headers(firefox_ua)
|
||||
|
||||
Reference in New Issue
Block a user