Skip to content

feat: 增加 HTTP 页面语言识别#160

Draft
h3zh1 wants to merge 1 commit into
masterfrom
feat/http-language-detection
Draft

feat: 增加 HTTP 页面语言识别#160
h3zh1 wants to merge 1 commit into
masterfrom
feat/http-language-detection

Conversation

@h3zh1

@h3zh1 h3zh1 commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

背景

Spray 已经会在扫描过程中保存响应 header/body,并通过 extracts 输出从响应中提取到的信息。

本 PR 增加 HTTP 页面语言识别能力,将识别结果写入现有 extracts 结构,不新增网络请求,也不扩展输出 schema。

核心设计

复用已有响应:

  • 不新增网络请求
  • 直接基于 Baseline 已保存的 HeaderBody 做解析
  • body 分析采样限制在 200KB,避免对大响应造成额外内存压力

输出边界清晰:

  • 语言结果输出到 extracts
  • 不新增顶层输出字段
  • 不修改现有输出结构定义

识别来源:

  • Content-Language header
  • <html lang> / xml:lang
  • 常见 language meta / og:locale
  • 可见正文的轻量语言判断
  • 非 UTF-8 页面会按响应 charset 尝试解码

改动内容

新增

  • pkg/http_language.go — HTTP 页面语言提取逻辑

    • ExtractHTTPLanguage():从 header/body 提取语言信息
    • HTTPLanguageExtract():转换为 parsers.Extracteds
    • 支持 UTF-8 与声明 charset 解码
  • pkg/http_language_test.go — 语言提取单元测试

    • header/html/meta/body 来源
    • body 覆盖声明语言
    • GBK 页面解码
    • 空语言不输出 extract
  • core/baseline/http_language_test.go — baseline 集成测试

    • Collect() 后输出 extracts[name=language]
    • 不依赖 --finger / finger engine

修改

  • core/baseline/baseline.go
    • 在已有 Collect() 流程中追加 language extract
    • ProtonExtract / CollectURL 的响应信息提取模式保持一致

输出示例

完整 JSON 结果中会追加到 extracts 数组:

{
  "extracts": [
    {
      "name": "language",
      "severity": "info",
      "extract_result": ["en"]
    }
  ]
}

测试计划

  • git diff --check origin/master..HEAD
  • go test ./pkg/... ./core/baseline/... -v
  • go vet ./pkg ./core/baseline
  • 真实 URL 验证:https://example.com 输出 extracts[name=language]

已知情况

  • go test ./... 当前仍失败在已有的 TestE2E_CrawlHonorsMaxLengthcrawl followed a link located beyond --max-length 1KB。该失败点在本改动范围外,本 PR 未修改 crawl 逻辑。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant