6. API响应说明服务端接收到客户端的合法解析请求后,会分析请求参数,并发起域名解析任务,解析任务结束之后,服务端会返回解析结果,解析结果以JSON的格式向客户端返回。
6.1 响应字段说明响应报文为JSON格式,路径中各节点的含义如下:
字段路径
描述
必须
加密
取值示例
code
请求整体状态
是
否
success
mode
data加密模式:
0: 明文
1:AES-CBC-128(PKCS#7填充)
2:AES-GCM-128
否
否
0, 1, 2
data
响应数据根节点
否
否
JSON对象或加密字符串
data.cip
实际参与解析的客户端IP
否
是
192.168.1.1
data.answers
域名解析结果数组
否
是
JSON数组
data.answers[ ].dn
解析结果对应的域名
否
是
www.example.com
data.answers[ ].v4
IPv4解析结果
否
是
JSON对象
data.answers[ ].v4.ips
解析出的IPv4地址列表
否
是
["180.101.XX.XX", "180.101.XX.XX"]
data.answers[ ].v4.ttl
IPv4解析结果的TTL
否
是
60
data.answers[ ].v4.extra
SDNS解析中,IPv4的额外信息
否
是
"simplestring"
data.answers[ ].v6
IPv6解析结果
否
是
JSON对象
data.answers[ ].v6.ips
解析出的IPv6地址列表
否
是
["2400:3200::1"]
data.answers[ ].v6.ttl
IPv6解析结果的TTL
否
是
60
data.answers[ ].v6.extra
SDNS解析中,IPv6的额外信息
否
是
"simplestring"
data.answers[ ].v6.no_ip_code
无IP指示码
否
是
RRNotExist
6.2 响应Code说明code字段是整个HTTP解析请求响应的整体状态描述,取值、含义、以及对应的HTTP状态码如下。
响应码code
描述
HTTP状态码
success
请求被正常处理和返回。
200
MissingArgument
缺少必要参数。
400
InvalidHost
域名格式不合法。
400
TooManyHosts
单域名解析接口传递了多个待解析域名。
400
SdnsNotSupported
海外暂不支持SDNS服务。
400
InvalidAccount
无效账户、账户不存在或未配置任何解析域名。
403
MethodNotAllowed
不支持的HTTP方法。
405
InternalError
服务端内部错误。
500
6.3 无IP指示码由于域名配置的原因(如未在控制台将该域名接入解析列表)或者域名本身的原因(如域名没有配置IPv6记录),客户端可能在响应中拿不到IP,这里您可以通过no_ip_code字段获取对应的原因。以下是该字段的取值和含义。
no_ip_code
含义
DomainNotExist
无效域名,域名不存在于DNS系统中。
RRNotExist
域名不存在该类型的记录,请确认该域名是否配置了IPv4或者IPv6列表。
NonWhitelistDomain
未在控制台将该域名加入解析列表,HTTPDNS服务端不给予解析,请把参考域名管理添加域名。
AuthDNSTimeout
递归查询的过程中,权威DNS长时间未响应结果,可能是网络波动或者权威DNS故障。
Unknown
其他未知原因,请联系技术支持排查。
6.4 响应报文示例明文模式下的成功响应示例HTTP状态码为:200
响应消息体示例:
{
"code": "success",
"mode": 0,
"data": {
"answers": [
{
"dn": "www.example1.com",
"v4": {
"ips": [
"180.101.XX.XX",
"180.101.XX.XX"
],
"extra": "simplestring",
"ttl": 60
},
"v6": {
"ips": [],
"no_ip_code": "RRNotExist",
"extra": "simplestring"
}
},
{
"dn": "www.example2.com",
"v4": {
"ips": [
"180.101.51.73",
"180.101.49.44"
],
"ttl": 60
},
"v6": {
"ips": [],
"no_ip_code": "RRNotExist"
}
}
],
"cip": "192.168.1.1"
}
}密文模式下的成功响应示例HTTP状态码为:200
响应消息体示例:
{
"mode": 2,
"code": "success",
"data": "fCF3fVHFOrNAyCs9cEJAprAYx+RfdM8zDbXmVLypO/8ei1muFJ3cQ7EbyekDAU9CN+5UpnHf7vYQGplfXmuwbcSNz9J6hNVQ8XI+i5OTmZ3kRkTpPM8yXI7P7DYwRfWzpFB0Xu41iFHtv4uFYsRQAbNwnD7q9r2NXAUkBFPOOIJGeije9F9k5l4ytr1PFq/yruzsHXEktCT0wyEsnTSamplHYLnBfqwyKgaBharveZeGGlU1tfF6QE5xY2CRRBjntCnbvkuP8gv4y14qw8VYh3/YD6z3mTk6sgVO1rPc9YI039drDTpYf16WsPb+tPZ5YC805knG5k2OcsnxwNCfj/+ijJQSFBacCPbL5TfIdXfrAw8eczqIQLcTjQ7PExfHSkFxDJgzcl+V6cqI8lbn5vJsQcF2Bedo6WSLUPiy3vgdwOl8x2g7eqXnBzcSNsclQBVRK7g5gwynRBbZGJ4krH8="
}失败响应示例HTTP状态码为:4xx/5xx
响应消息体示例:
{
"code": "MissingArgument"
}6.5 响应数据解密(可选)当服务端返回加密响应时(mode 字段为 1 或 2),需要对 data 字段进行解密以获取实际的解析结果。
解密流程1. 检测加密模式:通过响应中的 mode 字段确定加密模式:
mode: 1 - AES-CBC 模式
mode: 2 - AES-GCM 模式
2. Base64 解码:对响应中的 data 字段进行 Base64 解码,得到二进制数据。
3. 提取 IV 和密文:根据加密模式从解码后的数据中提取 IV 和密文:
AES-CBC 模式(mode=1)
前 16 字节为 IV
后续字节为密文
AES-GCM 模式(mode=2)
前 12 字节为 IV
后续字节为密文
4. 进行解密:使用控制台获取的 secretKey 和提取的 IV 对密文进行解密。
5. 获取解密结果:解密后得到的数据即为原始的 data 字段内容,按照响应字段格式进行解析。
响应解密示例响应的data值
hvlBFDr8ZaQjNCyqvyn6cUPs/l/QI6Z8pORPdmpl/MpeslasdMi432cW5mFfPnvHmwzZpmgyd6vCnQb89YeIqwz0Yy61l9pm0PWX41xhD19HoTQPxHp90uLxjGYQIGgV6PPGVu84jyKLsao9tUTgTZc6zJnhZKnfMZjP5G67nRrwoU1r1SR68GJ6WyTL4JAqnHJoDx7yg08GAlrzYmbfiCSemy3/+yDvBZAE2jV692t/JAwtuSOlAHBX30Rx/VMdSsgaFDfQmPr+FNxBlPtcrrS2ml8xgvR/m4Gx8CncsQBZX1FoUHlfrGb4kAXvA0ilfCm5/4pO0fzqXwyE8QoBpwC06NtO5F4imdjQKfPWQByabIXE4SetroeGE0m/p6kt6n6xinbkH0oIcw9i4COibLr9TuOtDI+wN9oMtW9Xpo7rgQbsEDr55ABSr+4YgK2zAEuY13FabmgNMPhZQvBZcEpWEOQ=解密后的明文
{
"answers": [
{
"dn": "www.example1.com",
"v4": {
"ips": [
"192.185.XX.XXX"
],
"ttl": 14400
},
"v6": {
"ips": [],
"no_ip_code": "RRNotExist",
"ttl": 600
}
},
{
"dn": "www.example2.com",
"v4": {
"ips": [
"172.67.XXX.XX",
"104.21.XX.XX"
],
"ttl": 300
},
"v6": {
"ips": [
"2606:4700:3037:0:0:0:ac43:c316",
"2606:4700:3037:0:0:0:6815:2c31"
],
"ttl": 300
}
}
],
"cip": "192.168.1.1"
}后续步骤本文档说明了通过 HTTP API 进行域名解析的流程,包括构造请求参数、可选的加密与加签、以及发起请求与解析响应的步骤。后续您可以参考最佳实践建议,基于解析接口实现稳定、安全、高性能的 HTTPDNS 客户端。