ICP实时备案查询API接口详细教程[域名查备案]

简介: 随缘ICP实时备案查询API提供域名备案信息实时查询服务,支持主体/网站备案号、审核时间等数据获取。采用“随缘”设计,成功率10%-30%,成本低,适合非高实时性场景,适用于批量检查、合规监测等应用。

一、接口概述

随缘ICP实时备案查询API是由接口盒子提供的一项提供域名ICP备案信息查询服务的API接口。该接口能够实时查询指定域名的备案信息,包括主体备案号、网站备案号、主体名称、审核时间等关键数据。接口采用"随缘"设计理念,查询成功率受网络环境和验证码识别因素影响,综合成功率在10%-30%之间,但具有成本优势,适合对实时性要求不高的应用场景。

二、接口核心特性

2.1 查询特点

  • 实时查询:直接向备案系统发起实时查询,非缓存数据
  • 成功率说明:受验证码识别和网络波动影响,成功率在10%-30%之间
  • 查询耗时:正常查询需要5-20秒完成,建议设置超时时间20秒以上
  • 成本优势:即使只有10%的成功率,综合成本仍是全网最低

2.2 适用场景

  • 批量域名备案信息检查
  • 网站合规性监测
  • 域名交易前的备案状态验证
  • 内部管理系统集成

三、接口详细参数说明

3.1 请求基本信息

3.2 请求参数表

参数名称

参数名

是否必填

说明

用户ID

id

用户中心的数字ID,如:id=10000000

用户KEY

key

用户中心通讯秘钥,如:key=15he5h15ty854j5sr152hs2

域名

domain

要查询的主域名(非二级域名),如:domain=apihz.cn

缓存使用

hctype

0=优先使用缓存(默认),1=直接实时查询

3.3 返回参数详解

参数名称

参数名

说明

状态码

code

200=成功,400=错误

消息内容

msg

操作结果提示信息

域名

domain

查询的域名

域名ID

domainid

域名唯一标识

限制状态

xz

是否被限制("是"或"否")

主体备案号ID

mainid

主体备案号唯一标识

主体备案号

icp

主体备案号码

主体性质

maintype

企业/个人/事业单位等

备案ID

serviceid

网站备案号对应ID

网站备案号

icpw

完整的网站备案号

主体名称

mainname

备案主体全称

审核时间

uptime

备案审核通过时间

缓存时间

hctime

平台数据更新时间

四、调用示例代码

4.1 PHP调用示例

php

php

复制

<?php
/**
 * 随缘ICP备案查询API - PHP调用示例
 * 支持GET和POST两种请求方式
 */
class SyIcpQuery {
    private $apiUrl = 'https://cn.apihz.cn/api/wangzhan/syicp.php';
    private $userId = '你的用户ID'; // 替换为实际用户ID
    private $userKey = '你的用户KEY'; // 替换为实际用户KEY
    
    /**
     * GET方式查询域名备案信息
     * @param string $domain 要查询的域名
     * @param int $useCache 是否使用缓存 0=是 1=否
     * @return array 查询结果数组
     */
    public function queryByGet($domain, $useCache = 0) {
        // 构建请求URL
        $url = $this->apiUrl . '?id=' . $this->userId . 
               '&key=' . $this->userKey . 
               '&domain=' . urlencode($domain) . 
               '&hctype=' . intval($useCache);
        
        // 设置请求选项
        $options = [
            'http' => [
                'method' => 'GET',
                'timeout' => 25, // 设置25秒超时
                'header' => 'Content-type: application/x-www-form-urlencoded'
            ]
        ];
        
        $context = stream_context_create($options);
        
        // 发送请求并获取响应
        $response = file_get_contents($url, false, $context);
        
        if ($response === FALSE) {
            return ['code' => 400, 'msg' => '请求失败'];
        }
        
        return json_decode($response, true);
    }
    
    /**
     * POST方式查询域名备案信息
     * @param string $domain 要查询的域名
     * @param int $useCache 是否使用缓存 0=是 1=否
     * @return array 查询结果数组
     */
    public function queryByPost($domain, $useCache = 0) {
        // 准备POST数据
        $postData = http_build_query([
            'id' => $this->userId,
            'key' => $this->userKey,
            'domain' => $domain,
            'hctype' => $useCache
        ]);
        
        // 设置请求选项
        $options = [
            'http' => [
                'method' => 'POST',
                'header' => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postData,
                'timeout' => 25
            ]
        ];
        
        $context = stream_context_create($options);
        $response = file_get_contents($this->apiUrl, false, $context);
        
        if ($response === FALSE) {
            return ['code' => 400, 'msg' => '请求失败'];
        }
        
        return json_decode($response, true);
    }
    
    /**
     * 带重试机制的查询方法
     * @param string $domain 域名
     * @param int $retryTimes 重试次数
     * @return array 最终结果
     */
    public function queryWithRetry($domain, $retryTimes = 3) {
        for ($i = 0; $i < $retryTimes; $i++) {
            $result = $this->queryByGet($domain, 1); // 实时查询
            
            if ($result['code'] == 200) {
                return $result;
            }
            
            // 失败后等待2秒再重试
            sleep(2);
        }
        
        return ['code' => 400, 'msg' => '查询失败,已重试' . $retryTimes . '次'];
    }
}
// 使用示例
$icpQuery = new SyIcpQuery();
// 单次查询示例
$result = $icpQuery->queryByGet('apihz.cn', 1);
echo "查询结果:\n";
print_r($result);
// 带重试的查询示例
$result = $icpQuery->queryWithRetry('example.com');
echo "重试查询结果:\n";
print_r($result);
// 批量查询示例
$domains = ['baidu.com', 'taobao.com', 'qq.com'];
foreach ($domains as $domain) {
    $result = $icpQuery->queryWithRetry($domain);
    echo "域名 {$domain} 的备案信息:\n";
    print_r($result);
    echo "\n";
    sleep(1); // 避免频繁请求
}
?>

4.2 Python调用示例

python

python

下载

复制

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
随缘ICP备案查询API - Python调用示例
支持GET和POST两种请求方式
"""
import requests
import time
import json
from urllib.parse import urlencode
class SyIcpQuery:
    def __init__(self):
        self.api_url = 'https://cn.apihz.cn/api/wangzhan/syicp.php'
        self.user_id = '你的用户ID'  # 替换为实际用户ID
        self.user_key = '你的用户KEY'  # 替换为实际用户KEY
        self.timeout = 25  # 25秒超时
    
    def query_by_get(self, domain, use_cache=0):
        """
        GET方式查询域名备案信息
        :param domain: 要查询的域名
        :param use_cache: 是否使用缓存 0=是 1=否
        :return: 查询结果字典
        """
        try:
            # 构建请求参数
            params = {
                'id': self.user_id,
                'key': self.user_key,
                'domain': domain,
                'hctype': use_cache
            }
            
            # 发送GET请求
            response = requests.get(
                self.api_url, 
                params=params, 
                timeout=self.timeout
            )
            
            if response.status_code == 200:
                return response.json()
            else:
                return {'code': 400, 'msg': f'HTTP错误: {response.status_code}'}
                
        except requests.exceptions.RequestException as e:
            return {'code': 400, 'msg': f'请求异常: {str(e)}'}
        except json.JSONDecodeError as e:
            return {'code': 400, 'msg': f'JSON解析错误: {str(e)}'}
    
    def query_by_post(self, domain, use_cache=0):
        """
        POST方式查询域名备案信息
        :param domain: 要查询的域名
        :param use_cache: 是否使用缓存 0=是 1=否
        :return: 查询结果字典
        """
        try:
            # 准备POST数据
            data = {
                'id': self.user_id,
                'key': self.user_key,
                'domain': domain,
                'hctype': use_cache
            }
            
            # 设置请求头
            headers = {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
            
            # 发送POST请求
            response = requests.post(
                self.api_url,
                data=data,
                headers=headers,
                timeout=self.timeout
            )
            
            if response.status_code == 200:
                return response.json()
            else:
                return {'code': 400, 'msg': f'HTTP错误: {response.status_code}'}
                
        except requests.exceptions.RequestException as e:
            return {'code': 400, 'msg': f'请求异常: {str(e)}'}
        except json.JSONDecodeError as e:
            return {'code': 400, 'msg': f'JSON解析错误: {str(e)}'}
    
    def query_with_retry(self, domain, retry_times=3):
        """
        带重试机制的查询方法
        :param domain: 域名
        :param retry_times: 重试次数
        :return: 最终结果字典
        """
        for i in range(retry_times):
            result = self.query_by_get(domain, 1)  # 使用实时查询
            
            if result.get('code') == 200:
                return result
            
            print(f'第{i+1}次查询失败,准备重试...')
            time.sleep(2)  # 等待2秒后重试
        
        return {'code': 400, 'msg': f'查询失败,已重试{retry_times}次'}
    
    def batch_query(self, domains, delay=1):
        """
        批量查询多个域名
        :param domains: 域名列表
        :param delay: 查询间隔(秒)
        :return: 查询结果列表
        """
        results = []
        for domain in domains:
            print(f'正在查询域名: {domain}')
            result = self.query_with_retry(domain)
            results.append({
                'domain': domain,
                'result': result
            })
            time.sleep(delay)  # 避免频繁请求
        
        return results
# 使用示例
if __name__ == '__main__':
    icp_query = SyIcpQuery()
    
    # 单次查询示例
    print("=== 单次查询示例 ===")
    result = icp_query.query_by_get('apihz.cn', 1)
    print("查询结果:")
    print(json.dumps(result, ensure_ascii=False, indent=2))
    
    # 带重试的查询示例
    print("\n=== 带重试查询示例 ===")
    result = icp_query.query_with_retry('example.com')
    print("重试查询结果:")
    print(json.dumps(result, ensure_ascii=False, indent=2))
    
    # 批量查询示例
    print("\n=== 批量查询示例 ===")
    domains_to_query = ['baidu.com', 'taobao.com', 'qq.com']
    batch_results = icp_query.batch_query(domains_to_query)
    
    for item in batch_results:
        print(f"\n域名: {item['domain']}")
        print("备案信息:")
        print(json.dumps(item['result'], ensure_ascii=False, indent=2))

五、接口使用注意事项

5.1 成功率优化策略

  • 重试机制:建议实现自动重试逻辑,推荐重试3-5次
  • 超时设置:单次查询超时时间建议设置为20秒以上
  • 请求频率:避免过高频率请求,建议间隔1-2秒
  • 错误处理:完善的状态码判断和异常处理机制

5.2 数据解析要点

  • 状态码200时,需检查icp字段是否为空,为空表示未备案
  • 主体备案号(icp)和网站备案号(icpw)可能相同或不同
  • 审核时间(uptime)格式为"YYYY-MM-DD HH:MM:SS"
  • 平台缓存时间(hctime)反映数据新鲜度

5.3 账户配置说明

  • 需要使用个人用户ID和KEY,避免使用示例中的公共账号
  • 个人账户独享调用频次限制,公共账号共享限制
  • 每日调用无上限,但需遵守合理的调用频率

六、典型返回结果分析

6.1 查询成功示例

json

json

复制

{
    "code": 200,
    "domain": "apihz.cn",
    "domainid": "990004666995",
    "xz": "否",
    "mainid": "990000107041",
    "icp": "蜀ICP备2020030589号",
    "maintype": "企业",
    "serviceid": "990005551431",
    "icpw": "蜀ICP备2020030589号-10",
    "mainname": "绵阳耳关明皿网络科技有限公司",
    "uptime": "2024-08-30 10:02:20",
    "hctime": "2025-12-17 17:46:51"
}

6.2 查询失败示例

json

json

复制

{
    "code": 400,
    "msg": "通讯秘钥错误。"
}

6.3 未备案域名示例

json

json

复制

{
    "code": 200,
    "domain": "example.com",
    "icp": null,
    "msg": "查询成功,该域名未备案"
}

七、最佳实践建议

  1. 生产环境部署:建议使用异步查询方式,避免阻塞主业务流程
  2. 结果缓存:对查询结果进行本地缓存,减少重复查询
  3. 监控告警:实现查询成功率监控,低于阈值时发送告警
  4. 降级方案:准备离线查询或缓存查询作为备用方案
  5. 日志记录:完整记录查询请求和结果,便于问题排查

八、总结

随缘ICP实时备案查询API为开发者提供了一个经济实用的域名备案查询解决方案。虽然查询成功率有限,但通过合理的重试机制和错误处理,仍能满足大多数应用场景的需求。

目录
相关文章
|
4月前
|
JSON API PHP
免费ICP备案查询API接口详细教程
本文介绍“接口盒子”提供的免费ICP备案查询API,支持通过域名快速获取备案信息,如主办单位、备案号、审核时间等。基于离线库查询,适合非实时场景,开发者可免费调用并集成至应用,需注册获取ID和KEY,另有付费优享版供高并发需求使用。
900 2
|
JSON 网络协议 数据格式
curl常用参数详解及示例
curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上。
4453 1
|
XML 移动开发 小程序
抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。
2630 0
抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
|
10月前
|
人工智能 程序员 PHP
Cursor AI来袭!编程从此不再繁琐,一键生成代码,效率提升千倍
AI攻破最后防线!连架构设计都能自动生成,中级程序员集体破防
1677 10
Cursor AI来袭!编程从此不再繁琐,一键生成代码,效率提升千倍
|
9月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
1419 0
|
4月前
|
JSON API PHP
域名注册状态查询免费API接口详细教程
本文介绍“接口盒子”提供的免费域名注册状态查询API,支持批量检测.com/.cn域名是否被注册。提供PHP和Python调用示例,含完整代码与返回参数说明,助力开发者快速集成域名查询功能,适用于品牌保护、域名投资等场景。(239字)
1169 0
|
9月前
|
JavaScript 前端开发 API
对比Vue框架与React库的主要区别
在选择Vue还是React时,考虑项目的需求、团队的熟悉程度和个人偏好至关重要。如果项目需要快速原型开发和较小的学习曲线,Vue可能是更好的选择。相反,如果项目需要更大的灵活性,或者项目团队已经有React的经验,那么React可能是更合适的选择。
426 13
|
9月前
|
API Python
免费网络北京时间API接口
本文介绍如何通过接口盒子的免费API获取当前北京时间,支持多种格式及POST/GET请求方式。需注册账号获取ID和KEY,适用于服务器时间同步、日志记录等场景。
3411 6
|
9月前
|
网络协议 API PHP
域名WHOIS信息查询免费API使用指南
本文介绍接口盒子提供的免费域名WHOIS查询API,支持获取域名注册信息、到期时间、DNS服务器等数据。开发者可通过GET或POST请求调用,需使用用户ID和通讯秘钥认证,适用于.com、.net等顶级域名。提供PHP和Python调用示例及注意事项。
634 0
|
人工智能 安全 API
新手指南:Claude 3.5/4.0国内怎么使用?精选3种使用方法!
更强的上下文理解能力: Claude 在处理长文本和复杂对话时简直是王者
10300 2

热门文章

最新文章

下一篇
开通oss服务