一文看懂 Whois 域名查询 API:注册商、到期时间和 DNS 信息解析
本文介绍了Whois域名查询API的使用方法,该接口可将域名信息转换为结构化JSON数据。通过GET请求查询域名注册状态、注册商、创建/到期时间、DNS服务器等核心信息,适用于域名管理、资产监控等场景。接口支持域名归一化处理,返回字段包括域名可用性、有效期、DNS配置等关键数据,并提供Python调用示例。开发者可快速集成到域名管理后台、监控系统或建站平台中,实现自动化域名信息查询功能。
做域名管理、建站工具、资产监控、域名到期提醒或域名可用性查询时,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 | 域名后缀,例如 com、cn、org |
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_time和valid_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,
};
}
字段使用建议
如果是做域名查询页,可以把字段拆成四个信息区:
| 信息区 | 字段 | 展示方式 |
|---|---|---|
| 基础信息 | domain、suffix、is_available |
顶部摘要卡片 |
| 注册信息 | registrar、registrant、creation_time、expiration_time |
表格或详情列表 |
| DNS 信息 | name_servers、dnssec |
标签列表或折叠面板 |
| 状态信息 | domain_status、is_expired、expiring_soon |
状态徽标或提醒区域 |
对于到期提醒类产品,建议重点处理 expiration_time、valid_days 和 expiring_soon。对于域名资产盘点工具,建议把 registrar、name_servers、dnssec、domain_status 作为筛选字段,这样更方便运维人员做批量分析。
适用场景
1. 域名资产管理
企业内部可能拥有多个业务域名、活动域名和历史域名。接入 Whois 查询后,可以定期更新域名注册商、DNS、创建时间和到期时间,形成一份可检索的域名资产表。
2. 域名到期提醒
域名到期时间是域名管理系统的核心字段。接口返回 expiration_time、valid_days 和 expiring_soon,前端可以据此做列表排序、状态高亮或消息提醒。
3. 建站和域名工具
建站平台、域名搜索工具、站长工具都可以通过 Whois 接口展示域名是否可注册、域龄、注册商和 DNS 信息,让用户快速完成域名判断。
4. 运维巡检面板
对于运维平台来说,DNS 服务器、DNSSEC 状态和域名状态都很有价值。把 Whois 结果接进巡检面板后,可以更直观地查看域名配置概况。
小结
Whois 域名查询 API 的接入方式比较清晰:一个 GET 接口,一个必填 domain 参数,就可以拿到域名注册商、创建时间、到期时间、域龄、DNS 服务器、域名状态和 DNSSEC 等结构化数据。
对于开发者来说,它适合封装成域名查询服务,也适合接入域名管理后台、资产盘点系统、建站工具和运维巡检面板。把原本分散的 Whois 信息整理成 JSON 字段后,业务系统就能更方便地展示、搜索和自动化处理域名数据。
参考接口文档:https://apizero.cn/marketplace/whois
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)