⚠️ 当前适用版本:7.2.0,其他版本未测试
1. 修改 DNS API 配置文件:/www/server/panel/config/dns_api.json
[{"ps": "\u4f7f\u7528CloudFlare\u7684API\u63a5\u53e3\u81ea\u52a8\u89e3\u6790\u7533\u8bf7SSL", "data": [{"key": "SAVED_CF_MAIL", "value": "", "name": "E-Mail"}, {"key": "SAVED_CF_KEY", "value": "", "name": "API Key"}], "help": "CloudFlare\u540e\u53f0\u83b7\u53d6Global API Key", "name": "CloudFlareDns", "title": "CloudFlare"}, {"ps": "\u4f7f\u7528 Hostker \u7684 API \u63a5\u53e3\u81ea\u52a8\u89e3\u6790\u7533\u8bf7 SSL", "data": [{"key": "SAVED_KER_MAIL", "value": "", "name": "E-Mail"}, {"key": "SAVED_KER_KEY", "value": "", "name": "API Token"}], "help": "\u957f\u5ea6\u4e3a 64 \u4f4d\u7684 API \u4ee4\u724c\uff0c\u767b\u5f55\u5ba2\u6237\u4e2d\u5fc3\u300c\u8d26\u53f7\u8d44\u6599\u300d\u4e2d\u53ef\u4ee5\u83b7\u53d6", "name": "HostkerDns", "title": "Hostker"}, {"ps": "\u4f7f\u7528\u5b9d\u5854DNS\u4e91\u89e3\u6790\u63d2\u4ef6\u81ea\u52a8\u89e3\u6790\u7533\u8bf7SSL", "title": "\u5b9d\u5854DNS\u4e91\u89e3\u6790", "data": false, "help": "", "name": "Dns_com"}, {"ps": "\u4f7f\u7528DnsPod\u7684API\u63a5\u53e3\u81ea\u52a8\u89e3\u6790\u7533\u8bf7SSL", "title": "DnsPod", "data": [{"value": "", "key": "SAVED_DP_Id", "name": "ID"}, {"value": "", "key": "SAVED_DP_Key", "name": "Token"}], "help": "DnsPod\u540e\u53f0\u300b\u7528\u6237\u4e2d\u5fc3\u300b\u5b89\u5168\u8bbe\u7f6e\uff0c\u5f00\u542fAPI Token", "name": "DNSPodDns"}, {"ps": "\u4f7f\u7528\u963f\u91cc\u4e91API\u63a5\u53e3\u81ea\u52a8\u89e3\u6790\u7533\u8bf7SSL", "title": "\u963f\u91cc\u4e91DNS", "data": [{"value": "", "key": "SAVED_Ali_Key", "name": "AccessKey"}, {"value": "", "key": "SAVED_Ali_Secret", "name": "SecretKey"}], "help": "\u963f\u91cc\u4e91\u63a7\u5236\u53f0\u300b\u7528\u6237\u5934\u50cf\u300baccesskeys\u6309\u6307\u5f15\u83b7\u53d6AccessKey/SecretKey", "name": "AliyunDns"}, {"ps": "\u4f7f\u7528cloudxns\u7684API\u63a5\u53e3\u81ea\u52a8\u89e3\u6790\u7533\u8bf7SSL", "title": "CloudXns", "data": [{"value": "", "key": "SAVED_CX_Key", "name": "AccessKey"}, {"value": "", "key": "SAVED_CX_Secret", "name": "SecretKey"}], "help": "cloudxns\u540e\u53f0\u300b\u7528\u6237\u4e2d\u5fc3\u300bAPI\u7ba1\u7406\uff0c\u6309\u6307\u5f15\u83b7\u53d6AccessKey/SecretKey", "name": "CloudxnsDns"}, {"ps": "\u8fd4\u56dehost\u548ctxt\u503c,\u7531\u7528\u6237\u624b\u52a8\u89e3\u6790", "data": false, "name": "dns", "title": "\u624b\u52a8\u89e3\u6790"}]
* 代码较长,复制时注意复制完整(在代码上双击可选择全部)
2. 编辑 /www/server/panel/class/panelDnsapi.py
在文件末尾加入以下代码
class HostkerDns(BaseDns):
dns_provider_name = "hostker"
def __init__(self, HOSTKER_EMAIL, HOSTKER_TOKEN, HOSTKER_API_BASE_URL="https://i.hostker.com/api/"):
self.HOSTKER_EMAIL = HOSTKER_EMAIL
self.HOSTKER_TOKEN = HOSTKER_TOKEN
self.HOSTKER_API_BASE_URL = HOSTKER_API_BASE_URL
self.HTTP_TIMEOUT = 65 # seconds
if HOSTKER_API_BASE_URL[-1] != "/":
self.HOSTKER_API_BASE_URL = HOSTKER_API_BASE_URL + "/"
else:
self.HOSTKER_API_BASE_URL = HOSTKER_API_BASE_URL
super(HostkerDns, self).__init__()
def create_dns_record(self, domain_name, domain_dns_value):
domain_name,_,subd = extract_zone(domain_name)
self.add_record(domain_name,subd,domain_dns_value,'TXT')
def add_record(self,domain_name,subd,domain_dns_value,s_type):
url = urljoin(self.HOSTKER_API_BASE_URL, "dnsAddRecord")
body = {
"type": s_type,
"domain": domain_name,
"header": subd,
"data": domain_dns_value,
"ttl": "120",
"email": self.HOSTKER_EMAIL,
"token": self.HOSTKER_TOKEN,
}
create_hostker_dns_record_response = requests.post(
url, data=body, timeout=self.HTTP_TIMEOUT
).json()
if create_hostker_dns_record_response["success"] != 1:
raise ValueError(
"Error creating hostker dns record: status_code={status_code} response={response}".format(
status_code=create_hostker_dns_record_response["success"],
response=create_hostker_dns_record_response["errorMessage"],
)
)
def remove_record(self,domain_name,subd,s_type="TXT"):
url = urljoin(self.HOSTKER_API_BASE_URL, "dnsGetRecords")
rootdomain = domain_name
body = {
"domain": domain_name,
"email": self.HOSTKER_EMAIL,
"token": self.HOSTKER_TOKEN,
}
list_dns_response = requests.post(url, data=body, timeout=self.HTTP_TIMEOUT).json()
for i in range(0, len(list_dns_response["records"])):
if list_dns_response["records"][i]['header'] != subd:
continue
rid = list_dns_response["records"][i]["id"]
urlr = urljoin(self.HOSTKER_API_BASE_URL, "dnsDeleteRecord")
bodyr = {
"id": rid,
"email": self.HOSTKER_EMAIL,
"token": self.HOSTKER_TOKEN,
}
requests.post(
urlr, data=bodyr, timeout=self.HTTP_TIMEOUT
).json()
def delete_dns_record(self, domain_name, domain_dns_value):
try:
domain_name,_,subd = extract_zone(domain_name)
self.remove_record(domain_name,subd,'TXT')
except:
pass
# end HostkerDns
3. 重启宝塔面板即可