Initial commit

This commit is contained in:
Docker7530
2026-03-01 01:43:46 +08:00
commit c6125c117b
3840 changed files with 415340 additions and 0 deletions
@@ -0,0 +1,33 @@
域名备案号查询时,如果对一个完整的域名(例如:`cdn.jiangsu.chinatax.gov.cn`)无法直接获取备案信息,会将其拆分为子域名列表进行逐级查询。例如:
- 原始域名:`cdn.jiangsu.chinatax.gov.cn`
- 切割后的子域名列表:`["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"]`
通过对这些子域名一次性全部查询备案信息,得到一个备案信息映射:
```
{
"chinatax.gov.cn": "true_京ICP备13021685号-2",
"jiangsu.chinatax.gov.cn": "true_苏ICP备05002258号-2"
}
```
最后为原始域名(`cdn.jiangsu.chinatax.gov.cn`)确定一个最终的备案号。
逻辑是遍历子域名列表,根据子域名在备案信息映射中是否存在,选取对应的备案号。代码逻辑如下:
```java
subDomainMap.forEach((key, subs) -> subs.forEach(sub -> {
if (domainsICP.containsKey(sub)) {
result.put(key, domainsICP.get(sub));
}
}));
```
这里 `subDomainMap` 存储的是原始域名和其对应的子域名列表的映射,例如 `{ "cdn.jiangsu.chinatax.gov.cn": ["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"] }``domainsICP` 是备案信息映射,`result` 用于存储最终的备案号结果。
代码逻辑中,子域名列表 `["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"]` 是按照从长到短的顺序遍历的。由于 `result.put(key, value)` 会覆盖之前的值,最终结果总是会被列表中最后一个匹配到的子域名的备案号覆盖。
- 第一次循环,`sub``jiangsu.chinatax.gov.cn`,找到备案号 `true_苏ICP备05002258号-2`,存储到 `result` 中。
- 第二次循环,`sub``chinatax.gov.cn`,也找到备案号 `true_京ICP备13021685号-2`,会覆盖掉之前的值。
- 同理如果 `chinatax.gov.cn``false` 那么最终 `cdn.jiangsu.chinatax.gov.cn` 也会被覆盖为未备案(false)。