做域名管理、建站工具、资产监控、域名到期提醒或域名可用性查询时,Whois 信息是一个很常用的数据入口。开发者通常关心几个核心问题:这个域名是否已经注册?注册商是谁?创建时间和到期时间是什么?DNS 服务器有哪些?域名状态和 DNSSEC 状态如何?

本文以 「Whois 域名查询」接口为例,整理一份适合直接参考的接口文档式文章。它通过一个 GET 请求,把域名查询结果转换成结构化 JSON,方便后端系统、运维平台或域名工具直接接入。

接口介绍

Whois 域名查询 API 用于查询域名注册信息,并返回注册商、注册主体、创建时间、到期时间、DNS 服务器、域名状态、DNSSEC、域名可用性等字段。

它比较适合以下开发场景:

  • 域名管理后台展示注册信息和到期时间
  • 域名资产盘点工具批量查询域名基础资料
  • 建站平台在用户绑定域名前做域名信息预检查
  • 域名监控系统识别即将到期的域名并做前端提示
  • 域名查询小工具展示注册商、DNS 和域龄信息

接口会对输入域名做归一化处理。比如传入带协议、路径或端口的 URL,最终会按域名维度查询,便于前端直接把用户输入交给后端处理。

请求方式

接口地址:

GET https://v1.apizero.cn/api/whois

请求参数:

参数名 类型 是否必填 说明 示例
domain string 待查询域名。可以传入主域名,也可以传入带协议或路径的 URL,接口会归一化处理 baidu.com
with_raw boolean 是否返回原始 Whois 文本。常规业务展示建议保持 false false

认证方式:

  • 可以直接传入 domain 做快速调试
  • 项目接入时可以按控制台申请的 API Key 方式调用
  • 文档示例中支持在 URL 中追加 key=YOUR_API_KEY

cURL 示例

最简单的查询方式:

curl "https://v1.apizero.cn/api/whois?domain=baidu.com&with_raw=false"

带 Key 的请求可以这样写:

curl "https://v1.apizero.cn/api/whois?domain=baidu.com&with_raw=false&key=YOUR_API_KEY"

如果用户输入的是完整 URL,也可以交给接口归一化:

curl "https://v1.apizero.cn/api/whois?domain=https%3A%2F%2Fwww.baidu.com%2Fabc&with_raw=false"

返回字段

接口返回结构是常见的 JSON 包装格式:

{
  "code": 0,
  "msg": "成功",
  "data": {},
  "request_id": "mpf8irpzb6203bc9"
}

核心业务字段位于 data 中:

字段名 类型 说明
domain string 归一化后的主域名
suffix string 域名后缀,例如 comcnorg
is_available boolean 域名是否可注册
is_expired boolean 域名是否已过期
expiring_soon boolean 是否接近到期,适合做前端提示
registrar string 注册商名称
registrant string 注册主体,受隐私保护时可能为空
registrant_email string 注册联系邮箱,通常可能脱敏或为空
creation_time string 域名创建时间
expiration_time string 域名到期时间
creation_days number 已注册天数
creation_age_text string 人类可读的域龄描述
valid_days number 剩余有效天数
domain_status array 域名状态数组
name_servers array DNS 服务器数组
whois_server string Whois 服务器
dnssec string DNSSEC 状态
registrar_url string 注册商官网 URL
registrar_abuse_email string 注册商滥用举报邮箱
registrar_abuse_phone string 注册商滥用举报电话
query_time string 查询时间
raw_whois string 原始 Whois 文本,仅在 with_raw=true 时返回

返回示例

下面是查询 baidu.com 的结构示例:

{
  "code": 0,
  "msg": "成功",
  "data": {
    "domain": "baidu.com",
    "suffix": "com",
    "is_available": false,
    "is_expired": false,
    "expiring_soon": false,
    "registrar": "MarkMonitor Information Technology (Shanghai) Co., Ltd.",
    "registrant": "",
    "registrant_email": "",
    "creation_time": "1999-10-11 19:05:17",
    "expiration_time": "2028-10-11 19:05:17",
    "creation_days": 9718,
    "creation_age_text": "26 年 8 个月",
    "valid_days": 874,
    "domain_status": [
      "clientDeleteProhibited (注册商设置禁止删除)",
      "clientTransferProhibited (注册商设置禁止转移)",
      "clientUpdateProhibited (注册商设置禁止更新)",
      "serverDeleteProhibited (注册局设置禁止删除)",
      "serverTransferProhibited (注册局设置禁止转移)",
      "serverUpdateProhibited (注册局设置禁止更新)"
    ],
    "name_servers": [
      "NS1.BAIDU.COM",
      "NS2.BAIDU.COM",
      "NS3.BAIDU.COM",
      "NS4.BAIDU.COM",
      "NS7.BAIDU.COM"
    ],
    "whois_server": "whois.markmonitor.com",
    "dnssec": "unsigned",
    "registrar_url": "http://markmonitor.com",
    "registrar_abuse_email": "abusecomplaints@markmonitor.com",
    "registrar_abuse_phone": "+1.2083895740",
    "query_time": "2026-05-20 19:13:48"
  },
  "request_id": "mpf8irpzb6203bc9"
}

业务里通常可以优先读取这些字段:

  • is_available:判断域名是否可注册
  • expiration_timevalid_days:展示到期时间和剩余天数
  • creation_age_text:展示域龄
  • registrar:展示注册商
  • name_servers:展示 DNS 服务器
  • domain_status:展示域名状态
  • dnssec:展示 DNSSEC 状态

Python 调用示例

import requests

endpoint = "https://v1.apizero.cn/api/whois"

params = {
    "domain": "baidu.com",
    "with_raw": "false",
    # "key": "YOUR_API_KEY",
}

resp = requests.get(endpoint, params=params, timeout=10)
result = resp.json()

if result.get("code") == 0:
    item = result.get("data", {})
    print("域名:", item.get("domain"))
    print("后缀:", item.get("suffix"))
    print("是否可注册:", item.get("is_available"))
    print("注册商:", item.get("registrar"))
    print("创建时间:", item.get("creation_time"))
    print("到期时间:", item.get("expiration_time"))
    print("域龄:", item.get("creation_age_text"))
    print("DNS:", ", ".join(item.get("name_servers") or []))
else:
    print("查询失败:", result.get("msg"))

如果想在业务系统里统一字段,可以封装一个简洁的转换函数:

def normalize_whois(payload: dict) -> dict | None:
    if payload.get("code") != 0:
        return None

    data = payload.get("data") or {}

    return {
        "domain": data.get("domain"),
        "suffix": data.get("suffix"),
        "available": data.get("is_available"),
        "expired": data.get("is_expired"),
        "expiringSoon": data.get("expiring_soon"),
        "registrar": data.get("registrar"),
        "creationTime": data.get("creation_time"),
        "expirationTime": data.get("expiration_time"),
        "ageText": data.get("creation_age_text"),
        "validDays": data.get("valid_days"),
        "nameServers": data.get("name_servers") or [],
        "dnssec": data.get("dnssec"),
    }

JavaScript 调用示例

const endpoint = "https://v1.apizero.cn/api/whois";

const params = new URLSearchParams({
  domain: "baidu.com",
  with_raw: "false",
  // key: "YOUR_API_KEY",
});

const response = await fetch(`${endpoint}?${params.toString()}`);
const result = await response.json();

if (result.code === 0) {
  const item = result.data || {};

  console.log({
    domain: item.domain,
    suffix: item.suffix,
    available: item.is_available,
    registrar: item.registrar,
    creationTime: item.creation_time,
    expirationTime: item.expiration_time,
    ageText: item.creation_age_text,
    nameServers: item.name_servers,
    dnssec: item.dnssec,
  });
} else {
  console.log("查询失败", result.msg);
}

在后端项目中,也可以进一步封装成服务函数:

export async function queryWhois(domain, apiKey) {
  const params = new URLSearchParams({
    domain,
    with_raw: "false",
  });

  if (apiKey) params.set("key", apiKey);

  const res = await fetch(
    `https://v1.apizero.cn/api/whois?${params.toString()}`
  );

  const json = await res.json();
  if (json.code !== 0) return null;

  const data = json.data || {};

  return {
    domain: data.domain,
    suffix: data.suffix,
    available: data.is_available,
    expired: data.is_expired,
    expiringSoon: data.expiring_soon,
    registrar: data.registrar,
    creationTime: data.creation_time,
    expirationTime: data.expiration_time,
    ageText: data.creation_age_text,
    validDays: data.valid_days,
    status: data.domain_status || [],
    nameServers: data.name_servers || [],
    dnssec: data.dnssec,
  };
}

字段使用建议

如果是做域名查询页,可以把字段拆成四个信息区:

信息区 字段 展示方式
基础信息 domainsuffixis_available 顶部摘要卡片
注册信息 registrarregistrantcreation_timeexpiration_time 表格或详情列表
DNS 信息 name_serversdnssec 标签列表或折叠面板
状态信息 domain_statusis_expiredexpiring_soon 状态徽标或提醒区域

对于到期提醒类产品,建议重点处理 expiration_timevalid_daysexpiring_soon。对于域名资产盘点工具,建议把 registrarname_serversdnssecdomain_status 作为筛选字段,这样更方便运维人员做批量分析。

适用场景

1. 域名资产管理

企业内部可能拥有多个业务域名、活动域名和历史域名。接入 Whois 查询后,可以定期更新域名注册商、DNS、创建时间和到期时间,形成一份可检索的域名资产表。

2. 域名到期提醒

域名到期时间是域名管理系统的核心字段。接口返回 expiration_timevalid_daysexpiring_soon,前端可以据此做列表排序、状态高亮或消息提醒。

3. 建站和域名工具

建站平台、域名搜索工具、站长工具都可以通过 Whois 接口展示域名是否可注册、域龄、注册商和 DNS 信息,让用户快速完成域名判断。

4. 运维巡检面板

对于运维平台来说,DNS 服务器、DNSSEC 状态和域名状态都很有价值。把 Whois 结果接进巡检面板后,可以更直观地查看域名配置概况。

小结

Whois 域名查询 API 的接入方式比较清晰:一个 GET 接口,一个必填 domain 参数,就可以拿到域名注册商、创建时间、到期时间、域龄、DNS 服务器、域名状态和 DNSSEC 等结构化数据。

对于开发者来说,它适合封装成域名查询服务,也适合接入域名管理后台、资产盘点系统、建站工具和运维巡检面板。把原本分散的 Whois 信息整理成 JSON 字段后,业务系统就能更方便地展示、搜索和自动化处理域名数据。

参考接口文档:https://apizero.cn/marketplace/whois

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐