Skip to content

🔁 查询生命周期

以「公司 → 名下域名」为例,跟踪一次查询的完整内部旅程。

时序

调用方 ── QueryCompany(ctx, "X科技") ──▶ core/icp

  ① 输入归一化                            │
     "X科技" → "X科技有限公司"            │

  ② 查缓存                               │
     key = query:company:X科技有限公司    │
     命中? ──是──▶ 直接返回 ◀────────────┤
         │否                              │
  ③ 选凭证                               │
     从凭证池选配额充裕的创宇盾 Key        │

  ④ 主路径:source/zhudun.QueryCompany    │
     ├─ httpc 请求创宇盾 API              │
     ├─ 限速令牌桶                        │
     └─ 失败? ──可重试──▶ 指数退避重试    │
         │终态失败                         │
  ⑤ 补全路径:source/miit                │
     ├─ 拉页面                            │
     ├─ 触发点选验证码                    │
     ├─ source/ocr.Break 突破             │
     └─ 解析 HTML                         │

  ⑥ 聚合 / 去重 / 交叉校验                │

  ⑦ 写缓存(TTL 默认 24h)                │

调用方 ◀── 结构化 []DomainRecord ─────────┘

阶段详解

① 输入归一化

统一全/半角、剥离括号注释、公司类型别名映射。详见 🧭 解决思路

② 查缓存

命中即返回,避免重复消耗配额。见 📦 cache 包

③ 选凭证

凭证池按「剩余配额 + 最近失败率」打分选最优。见 🔑 凭证管理

④ 主路径

创宇盾结构化 API。限速与重试见 🛡️ 反爬与限速

⑤ 补全路径

主路径配额耗尽或结果不足时触发。OCR 突破见 👁️ 点选 OCR

⑥ 聚合

去重与冲突仲裁见 🔄 数据聚合

⑦ 写缓存

成功结果按 TTL 写回,终态失败不写(避免脏缓存)。

可观测性

每阶段产出 trace span,整条查询的 traceID 一致,便于在日志中串联。

📚 延伸阅读

Released under the MIT License.