最小可运行示例:一个 GET 请求查询 ICP 备案信息
适用场景ICP 备案查询是一个非常高频的开发诉求。常见的落地场景包括域名准入检查在内容发布、广告投放或用户提交外链之前先判断目标域名是否完成备案从源头规避因未备案域名导致的业务风险。运营数据清洗批量筛选已备案域名用于活动报名或开发者认证避免人工逐一核对。企业内部系统集成在 CMS 或工单系统中增加备案信息自动回填减少运营人员在工信部站点手动检索的时间。安全巡检与资产管理定期扫描公司域名列表中备案主体的变更及时发现备案被注销或主体不一致的问题。以上场景都有一个共同点调用方只关心「这个域名有没有备案」「备案主体是谁」并不需要理解工信部备案系统内部复杂的查询逻辑。这正好是 ICP 备案查询 API 的设计边界所在。接口能力边界在写第一行代码之前先明确接口能做什么、不能做什么能避免很多认知偏差。接口本质上是「域名 → 备案信息」的映射查询它具备三个值得注意的能力自动域名清洗接口接收的不一定是纯域名。传入https://www.baidu.com/abc、m.baidu.com:8080/foo或baidu.com接口都会自动剥离协议、路径、端口和www.前缀统一识别为baidu.com。这省去了调用方自行做 URL 解析的代码。已备案与未备案的语义区分已备案域名返回is_filedtrue以及完整的 6 个字段未备案、境外域名或备案已注销的域名返回is_filedfalse且字段为空。注意未备案不是错误而是正常的业务响应因此不需要用 try/catch 包裹业务判断。缓存策略已备案数据缓存 24 小时未备案数据缓存 1 小时。原因是备案状态本身变更频率低而新备案通过审核后有尽快被查到的需求。这个缓存设计意味着你查询到的结果不是绝对的实时状态但用于业务判断已经足够。请求参数与鉴权本次调用的信息如下项目值请求方法GET请求地址https://v1.apizero.cn/api/icpQuery 参数domain必填Header 参数Authorization可选分类开发工具推荐 QPS5 / sQuery 参数domain是唯一必填参数类型为字符串。它的宽容度很高支持完整 URL 输入接口会自动清洗。换句话说下面三种写法在语义上是等价的baidu.com https://www.baidu.com/abc m.baidu.com:8080/fooHeader 鉴权参数Authorization是可选的鉴权头格式为Bearer sk_live_xxx。匿名调用时可以省略该参数但会受每日调用额度的限制当业务量较大或对稳定性有要求时建议配置 API Key 后再调用。最小可运行示例curl 一行接入最小可运行示例的核心目标只有一个用最少的代码拿到有效响应。curl 是这个目标最直接的体现。把下面的命令复制到终端将$APIZERO_API_KEY替换成你的真实 Key或者直接去掉-H行做匿名调用curl -sS \ -X GET \ -H X-API-Key: $APIZERO_API_KEY \ https://v1.apizero.cn/api/icp?domainbaidu.com注意上述命令中的X-API-Key是素材中 curl 示例使用的鉴权头。如果你使用文档最新推荐的Authorization: Bearer方式则改成curl -sS \ -X GET \ -H Authorization: Bearer $APIZERO_API_KEY \ https://v1.apizero.cn/api/icp?domainbaidu.com两者具体以官方文档的鉴权说明为准。建议先跑通第一个 curl再进入代码封装阶段。从命令行走向代码Python 与 JavaScript 示例curl 用来验证连通性很高效但业务系统最终还是要落到代码里。这里给出 Python 和 Node.js 两个最小可运行版本。Python 示例使用标准库urllib.request不依赖任何第三方库import json import urllib.parse import urllib.request API_URL https://v1.apizero.cn/api/icp DOMAIN baidu.com params urllib.parse.urlencode({domain: DOMAIN}) url f{API_URL}?{params} req urllib.request.Request( url, headers{ # 匿名调用时移除这一行 Authorization: Bearer sk_live_xxxxxxxxxxxxxx, Accept: application/json, }, ) with urllib.request.urlopen(req, timeout5) as resp: payload json.load(resp) if payload.get(code) 0: data payload.get(data, {}) if data.get(is_filed): print(f{data[domain]} 已备案) print(f备案号: {data[icp_code]}) print(f主办单位: {data[company_name]}) print(f单位性质: {data[company_type]}) print(f网站名称: {data[site_name]}) print(f审核时间: {data[audit_time]}) else: print(f{DOMAIN} 未备案、已注销或为境外域名) else: print(f业务异常: code{payload.get(code)}, msg{payload.get(msg)})判断逻辑非常直观先检查业务码code再检查is_filed。这种两级判断避免了把「未备案」当成「接口异常」。JavaScript 示例在 Node.js 18 环境中可以直接使用全局fetchconst apiUrl https://v1.apizero.cn/api/icp; const domain baidu.com; const url new URL(apiUrl); url.searchParams.set(domain, domain); const res await fetch(url, { headers: { // 匿名调用时移除这一行 Authorization: Bearer sk_live_xxxxxxxxxxxxxx, Accept: application/json, }, }); const payload await res.json(); if (payload.code 0) { const data payload.data; if (data.is_filed) { console.log(${data.domain} 已备案); console.log(备案号: ${data.icp_code}); console.log(主办单位: ${data.company_name}); console.log(单位性质: ${data.company_type}); console.log(网站名称: ${data.site_name}); console.log(审核时间: ${data.audit_time}); } else { console.log(${domain} 未备案、已注销或为境外域名); } } else { console.error(业务异常: code${payload.code}, msg${payload.msg}); }两个示例都遵循同一个处理框架拆解 URL → 发请求 → 先看业务码 → 再看业务数据。这比直接访问data.icp_code要稳健因为未备案时data是空字段结构直接取属性会拿到undefined。返回字段逐个拆解以domainbaidu.com为例成功响应如下{ code: 0, data: { audit_time: 2019-05-16 16:06:21, company_name: 北京百度网讯科技有限公司, company_type: 企业, domain: baidu.com, icp_code: 京ICP证030173号-1, is_filed: true, site_name: 百度一下你就知道 }, msg: 成功, request_id: abc123def456 }各字段含义如下字段类型说明codenumber业务状态码0表示成功msgstring响应描述例如「成功」request_idstring请求唯一标识排查问题时可以提供给服务方data.domainstring清洗后的域名data.is_filedboolean是否已备案。true为已备案false为未备案data.icp_codestring备案号如京ICP证030173号-1data.site_namestring网站名称来自备案信息data.company_namestring主办单位名称可能是企业、个人或事业单位data.company_typestring单位性质如「企业」data.audit_timestring备案审核通过时间格式为YYYY-MM-DD HH:mm:ss一个容易忽略的细节返回的domain是接口清洗后的值不一定是请求时传的原始字符串。如果业务系统里需要回写数据库建议以响应中的data.domain为准避免不同格式造成的数据冗余。未备案与异常情况的语义区分这是本文重点强调的边界。很多开发者在第一次接入时会有疑惑未备案是不是抛错误不是。未备案、境外域名、备案已注销时接口返回的code仍然是0但data.is_filed为false并且data中除domain外的业务字段为空。这种设计有一个明显的好处业务代码可以写出非常干净的 if 分支if (payload.code ! 0) { // 只有这里才是真的异常比如参数错误、鉴权失败、请求频率超限 } if (data.is_filed) { // 已备案逻辑 } else { // 未备案逻辑 }不要用「icp_code是否存在」来判断备案状态因为字段是否为空并不是该接口承诺的契约is_filed才是判断备案状态的唯一依据。常见错误与排查思路初次接入时最可能遇到以下几类问题按排查优先级排序鉴权方式不对。先确认你使用的是Authorization: Bearer还是X-API-Key两者混用可能被识别为无效鉴权。其次是确认 Key 前缀是否完整例如sk_live_开头。域名格式异常。虽然接口有自动清洗能力但如果你传入的字符串包含空格或换行清洗逻辑可能无法正确识别。建议在请求前做一次trim()。把未备案当成失败。is_filedfalse不是错误先检查你的代码是否在code ! 0时把未备案的数据也拦截掉了。忽略缓存导致的数据延迟。一个刚刚通过审核的新备案域名在 1 小时缓存窗口内可能仍然返回未备案。设计业务逻辑时要预留这个时间窗口不要基于一次查询结果做永久性标记。频率超限。接口 QPS 为 5 / s。如果业务需要在短时间内批量查询必须在客户端做限速否则会收到限流响应。超时时间设置过短。网络抖动时一个跨地域请求可能超过 3 秒。建议把超时时间设为 5 秒并在超时后做一次重试但重试次数不建议超过 2 次避免对服务端造成额外压力。工程化注意事项把接口从「能跑」提升到「可靠运行」还需要关注以下工程细节缓存与时效性接口侧已经有 24 小时 / 1 小时的缓存业务侧不需要再做长时间缓存。但如果你的场景是每日批量巡检建议把查询结果落库并记录查询时间便于追踪备案状态变化的时间点。批量场景的限速设计假设需要批量查询 10000 个域名按 5 QPS 计算理论耗时约 33 分钟。建议用量使用令牌桶或简单的间隔循环把请求速率控制在 4 QPS 左右留出余量。增加本地增量缓存已备案域名 24 小时内不重复请求未备案域名 1 小时内不重复请求。日志与可观测性建议把以下信息写入日志传入的原始域名和接口返回的清洗后域名request_id响应耗时code与is_filed的组合结果request_id是排查问题时的关键凭证。一旦出现批量异常可以依据request_id快速证实或排除接口侧故障。使用场景的资料留存如果是合规审查或内容安全场景建议把接口返回完整 JSON 存档而不仅仅是提取某一个字段。一旦后续出现争议原始响应就是最直接的证据。参考文档接口文档页https://apizero.cn/aidocs/icp原始文档Markdownhttps://apizero.cn/aidocs/icp/raw.md

相关新闻

G-Helper启动异常终极指南:完整解决方案与故障排查流程

G-Helper启动异常终极指南:完整解决方案与故障排查流程

G-Helper启动异常终极指南:完整解决方案与故障排查流程 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…

2026/10/18 1:49:13 阅读更多 →
终极Citra模拟器指南:如何在电脑上完美运行任天堂3DS游戏?

终极Citra模拟器指南:如何在电脑上完美运行任天堂3DS游戏?

终极Citra模拟器指南:如何在电脑上完美运行任天堂3DS游戏? 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra 想在电脑上体验任天堂3DS游戏的魅力吗?Citra模拟器让你在Windows、ma…

2026/10/18 1:49:21 阅读更多 →
终极Windows主题切换指南:深入解析ThemeFile类与视觉样式处理

终极Windows主题切换指南:深入解析ThemeFile类与视觉样式处理

终极Windows主题切换指南:深入解析ThemeFile类与视觉样式处理 Windows-Auto-Night-Mode是一款能够自动在Windows 10和Windows 11的深色与浅色主题之间切换的实用工具,它通过智能的主题管理机制,为用户打造舒适的视觉体验。本文将深入探讨其核…

2026/10/18 1:52:02 阅读更多 →

最新新闻

MT7663 USB WiFi驱动移植指南:交叉编译、固件加载与wlan0注册

MT7663 USB WiFi驱动移植指南:交叉编译、固件加载与wlan0注册

简介:这份资源是MT7663 USB转WiFi驱动源码包,面向需要在嵌入式Linux平台上移植无线网卡的开发者,尤其适合海思3531等ARM64平台。源码已在海思3531上交叉编译通过,生成的wlan_mt7663_usb.ko约3MB,配套的Makefile.aarch已…

2026/10/18 14:18:27 阅读更多 →
ADC数据手册深度解析:从PDF参数提取到硬件时序实现

ADC数据手册深度解析:从PDF参数提取到硬件时序实现

简介:本资源为MSM381A3729Z9BM1C模拟输出MEMS麦克风的官方英文数据手册(PDF),面向电子工程师、硬件开发人员及声学器件选型技术人员,用于指导该高性能微型麦克风在移动终端与可穿戴设备中的电路设计、PCB布局、SMT贴装…

2026/10/18 14:18:27 阅读更多 →
P1268 树的重量 【洛谷算法习题】

P1268 树的重量 【洛谷算法习题】

P1268 树的重量 网页链接 P1268 树的重量 题目描述 树可以用来表示物种之间的进化关系。一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异。现在,一个重要的问题是,根据物种之间…

2026/10/18 14:18:27 阅读更多 →
GRBL固件深度解析:从Arduino到工业级CNC运动控制

GRBL固件深度解析:从Arduino到工业级CNC运动控制

简介:本资源是面向嵌入式开发者、DIY数控爱好者及高校机电类专业学生的GRBL开源固件完整源码包,专为基于Arduino的CNC控制器开发与学习设计,解决小型数控设备(如雕刻机、激光切割机)的G代码解析与运动控制核心问题。压…

2026/10/18 14:18:27 阅读更多 →
PAD竞速答题怎么按队伍分组上屏:一场厂区开幕式安全知识答题的系统配置复盘

PAD竞速答题怎么按队伍分组上屏:一场厂区开幕式安全知识答题的系统配置复盘

本文范围:开幕式里的答题环节;PAD型号、组网方式和系统代码不在讨论内。1. 项目背景塔河炼化(中国石化塔河炼化有限责任公司)2026年5月26日在新疆阿克苏地区举行第二届“最强操作”竞赛开幕式,开幕式里安排了一段安全知…

2026/10/18 14:18:27 阅读更多 →
超立方体Ramsey(openai/math 家族171)攻坚日志 H11:row-link商图构造长链路形式化进展(节选)

超立方体Ramsey(openai/math 家族171)攻坚日志 H11:row-link商图构造长链路形式化进展(节选)

超立方体Ramsey(openai/math 家族171)攻坚日志 H11:row-link商图构造长链路形式化进展(节选)专栏:组合概率与形式化审计|标签:Lea(n^4)、极值组合、Ramsey理论、条件局部引理、超立方…

2026/10/18 14:17:26 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →