公司动态
从报错到修复:DNS记录查询API的常见错误与排查手册
适用场景与接口价值在日常开发与运维中DNS 记录查询是排查域名配置、邮件路由、CDN 切换、TLS 证书签发等问题的基本功。单独使用dig或nslookup固然可行但在自动化脚本、CI/CD 流程、多云的集中管理场景下一个结构化的 RESTful API 能显著提升效率。本接口DNS 记录查询提供了 A、AAAA、NS、CNAME、MX、TXT、CAA、SOA 八种标准记录类型以及一次性获取所有类型的 ANY 模式。其内部聚合了 AliDNS、DNSPod、360 三家国内 DoH 源返回时会对多条记录去重并标注每条记录的来源sources 字段便于跨供应商比对。然而任何 API 在生产中都会遇到各种调用异常。本文将从排错角度逐一分析该接口使用中可能遇到的错误类型、判断依据和修复方法让你不再对着一个curl: (52) Empty reply from server束手无策。接口能力与边界在深入错误之前先明确接口的“可接受”范围QPS10 请求/秒。超出后可能返回限流错误HTTP 429 或业务错误码。鉴权可选。不传X-API-Key走匿名额度但额度有限建议线上使用固定 API Key避免因匿名耗尽而中断。域名自动清洗接口会剥离http://、https://、路径、端口只取纯净域名。但传空字符串、纯 IP 或不合法的域名格式会触发错误。类型参数支持名称如 A、AAAA、MX和数字编码1、15、16。名称大小写敏感根据实际接口反馈A和a可能被识别为不同值建议统一使用大写或数字编码避免歧义。请求参数与鉴权接口方法是 GETURL 固定为https://v1.apizero.cn/api/dns-query。必填参数host域名字符串。示例example.com合法http://example.com/path虽然会被自动清理但若附加了多余字符可能因编码问题导致解析失败。可选参数type默认A。允许值A,AAAA,NS,CNAME,MX,TXT,CAA,SOA,ANY或其对应数字1, 2, 5, 6, 15, 16, 28, 257。若填写不支持的字符串如SRV或拼写错误接口将返回参数非法错误。Header 可选X-API-Key若使用匿名额度无需此头。若使用 API Key务必确保未泄露且令牌有效。可复制的 curl 示例# 匿名查询额度有限 curl -sS -X GET https://v1.apizero.cn/api/dns-query?hostbaidu.comtypeA # 带 API Key 查询 MX 记录替换 $YOUR_API_KEY curl -sS -X GET \ -H X-API-Key: $YOUR_API_KEY \ https://v1.apizero.cn/api/dns-query?hostbaidu.comtypeMX建议先跑匿名版确认基础通路再引入鉴权。返回值结构与常见状态码成功响应结构HTTP 200{ code: 0, data: { exec_ms: 234, host: baidu.com, input: baidu.com, notes: null, records: [ // 每条记录含 data, name, parsed, sources, ttl, type, type_code ], sources: [alidns, china360, dnspod], total: 2, type: MX, type_code: 15 }, msg: 成功, request_id: mota... }错误时code非 0且msg给出原因。根据接口文档及常见 DoH API 设计错误码大致如下具体以实际返回为准code含义处理建议1参数错误host 为空、type 非法等检查入参格式和类型值2查询失败域名不存在、DNS 解析内部错误验证域名有效性或稍后重试3限流或鉴权失败降低请求频率检查 API Key 是否过期-1系统内部错误携带request_id联系技术支持注以上错误码系根据通用 API 规范推测真实错误码请以接口返回的code和msg为准。排错时应始终优先读取msg字段。常见错误与排错步骤1. 请求参数缺失或格式错误现象code: 1msg: host is required或类似。排查方法确认host参数未遗漏且已被 URL 编码非 ASCII 域名需 encode。检查type参数值是否属于支持列表。大小写建议使用大写如MX或数字如15。若用mx小写接口可能拒绝。使用curl -v查看实际发送的 URL确认无多余空格或换行。修复规范入参使用脚本生成 URL 时用—data-urlencode或 URL 编码函数。2. 域名解析失败域名不存在或无法解析现象code: 2msg: domain not found或成功但records为空数组。排查方法先用dig A example.com或nslookup example.com确认域名在公共 DNS 上是否有记录。若自有域名检查 DNS 配置是否生效TTL 是否已过。观察接口返回的sources字段是否缺失某个源若china360缺失说明该 DoH 对域名无记录但聚合结果仍可参考。修复确认域名正确后可降低请求频率因部分 DoH 有短时缓存抖动或换ANY类型全量拉取再过滤。3. 鉴权与限流异常现象无 API Key 时突然返回code: 3或 HTTP 403/429。带 API Key 后依然返回鉴权失败。排查方法检查X-API-Key头部是否准确传递。使用curl -H时注意无多余引号。匿名额度通常有每小时或每日上限。若频繁测试后遇到限流可等待几分钟再试或正式启用 API Key。查看request_id对照文档确认该 Key 是否被禁用。修复申请持久 API Key 并妥善保管在代码中加入指数退避重试最多 3 次重试间隔 1s、2s、4s。4. 网络层错误连接拒绝、超时、空回复现象curl: (7) Failed to connect to v1.apizero.cn port 443: Connection refused或(28) Operation timed out。排查方法验证本地网络能否正常访问v1.apizero.cn。使用ping或tcping宝塔面板等检查连通性。若处于内网或受限网络可能需配置代理。例如通过curl --proxy http://proxy:port测试。如果偶发性空回复可能是服务器临时过载重试即可。修复配置代理环境变量HTTP_PROXY、HTTPS_PROXY代码中设置connectTimeout为 5s、readTimeout为 10s避免长时间挂死。5. 类型参数type与预期不符现象成功返回但记录类型不是请求的类型例如请求MX却返回了A记录。排查方法检查请求 URL 中type是否拼写错误如Mx不是MX。接口对于不识别的大小写可能回退到默认A。修复强制使用大写或数字编码并在代码中将type值标准化如.toUpperCase()或映射表。工程化注意事项缓存 TTL每条记录都携带ttl秒。对于高频查询的域名如监控建议在客户端按ttl缓存减少 API 调用量。注意不同源可能返回不同 TTL取最小值较为保守。多类型异步查询如需同时获取 A 和 MX 记录可并行发送两个请求或直接使用typeANY一次获取所有类型。但 ANY 返回的数据量较大解析时应按type字段过滤。重试策略对于code: 3限流或网络超时采用指数退避重试。对于code: 1参数错误则不要重试直接记录日志并报警。日志记录每次请求记录request_id、exec_ms和code。若排查问题时需要提交工单必须提供request_id以便服务方定位。边缘情况域名含国际化域名IDN应先转换为 Punycode如中文.com→xn--...com接口虽能自动处理但手动转换更可靠。IP 地址如8.8.8.8理论上无 DNS 记录传参会得到空结果或错误应提前过滤。参考文档DNS 记录查询 API 原始文档API 文档页