# 公共接口概述
最后更新日期:2023年9月5日
# 提示
如果需要用于 ACME DNS-01 验证(例如 Let's encrypt 证书签发),请使用 PowerDNS 模拟接口,不需要自己对接 API。
# 接口细节
# 接口 URL
https://api.hostker.net/v2
# 请求方法
POST
# 请求和返回内容格式
JSON
# 签名方法
「个人资料」界面获得接口密钥,使用 HMAC-SHA256 算法用密钥对 JSON 内容进行签名。签名结果放在 HTTP 头部的 Sign 字段并在提交时请求。
// PHP 示例
$secret = 'xxxxxxxxxxx'; //密钥
$body = '{action: "DomainDNS.getDomainList"}'; //请求内容
$sign = hash_hmac('SHA256', $body, $secret); //签名结果
// Go 示例
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
func main() {
secret := "xxxxxxxxxxx"
body := "{action: \"DomainDNS.getDomainList\"}"
h := hmac.New(sha256.New, []byte(secret))
h.Write([]byte(body))
sign := hex.EncodeToString(h.Sum(nil)) //签名结果
}
// NodeJS 示例
var secret = "xxxxxxxxxxx";
var body = "{action: \"DomainDNS.getDomainList\"}";
var crypto = require('crypto');
var hmac = crypto.createHmac('sha256', secret);
data = hmac.update(body);
sign = data.digest('hex'); //签名结果
# Python3 示例
import hashlib
import hmac
secret = 'xxxxxxxxxxx'
body = '{action: "DomainDNS.getDomainList"}'
sign = hmac.new(
key=secret.encode('utf-8'),
msg=body.encode('utf-8'),
digestmod=hashlib.sha256
).hexdigest()
# 通信规范
# 请求 HTTP 头部字段
字段名 | 字段值(示例) | 类型 | 说明 |
---|---|---|---|
xxx@example.com | String | 账号邮箱 | |
Sign | xxxxxxxxxxxxx | String | HMAC-SHA256 签名 |
# JSON 格式
通用参数
字段名 | 字段值(示例) | 类型 | 说明 |
---|---|---|---|
action | DomainDNS.createRecord | String | 接口方法名称 |
host | www | String | (根据接口内容决定) |
... | ... | ... | (根据接口内容决定) |
示例
{action: "DomainDNS.createRecord", host: "www", ...}
# 统一返回内容
成功返回
字段名 | 字段值(示例) | 类型 | 说明 |
---|---|---|---|
success | true | Boolean | 是否成功 |
result | {id: 123} | Object | 调用成功后返回的内容,为空时是 {} |
成功示例
{success: true, result: {id: 123}}
失败返回
字段名 | 字段值(示例) | 类型 | 说明 |
---|---|---|---|
success | false | Boolean | 是否成功 |
error | 接口参数错误 | String | UTF8 编码的中文错误信息 |
失败示例
{success: false, error: "接口参数错误"}
# 频次限制
- 每个 IP 5 分钟内鉴权失败大于 10 次将会禁止访问。IPv6 同一个 /64 子网视为同一个 IP。
- 每个 IP 1 小时内累计请求次数不能超过 1000 次。
- 每个用户 5 分钟内接口调用次数不能超过 100 次。
- 每个用户 1 小时内接口调用次数不能超过 500 次。
超出频率限制将会在限制时间后恢复访问。
# SDK 和第三方服务
感谢 敖天羽 提供的 Go SDK 封装和 DDNS 服务!
Go SDK:https://github.com/csvwolf/ker.go (opens new window)
DDNS 服务:https://github.com/csvwolf/hostker-ddns (opens new window)