本文档介绍如何在调用 HTTP API 时,实现请求鉴权。
移动解析 HTTPDNS 的 HTTP API 通过查询参数中的 sign
参数进行请求鉴权。您需要自行计算 sign
参数的值。
sign
参数所需的参数您需要当前 API 的查询参数和 secret_key
来计算 sign
参数。
sign
参数。对于不同的 API,您使用的查询参数也不同。本文档分别介绍了以下 API 的 sign
参数计算方法:
sign
参数如果您调用 解析一个或多个域名 API 发送请求,您的请求中包含以下查询参数。同时,移动解析 HTTPDNS 的 Secret Key 是 secret_key
。
timestamp
account_id
domain
ip
type
您可以参见以下步骤计算 sign
参数。
sign
参数。签名计算的伪代码如下:
sign = MD5(strings.join(sort(secret_key, timestamp, account_id, domain, ip, type), "_"))
sign
参数计算示例假设您调用 解析一个或多个域名 API 发送请求,假设您的请求中包含以下参数:
secret_key
: QlgAuFMwNUwNtimestamp
: 1566808387000account_id
: 1023domain
: www.a.com,www.b.comip
:请求中未包含type
:请求中未包含sign
参数的计算方法为:MD5(__1023_1566808387000_QlgAuFMwNUwN_www.a.com,www.b.com)
得到的 sign
参数为 4b00a808d49a334991b7e50d324a9287
。
说明
ip
参数和 type
参数没有在请求中包含,这两个参数也需要参与签名计算且参数的值为空字符串 ""
。appid
参数是否在请求中包含,该参数都不参与签名计算。sign
参数计算示例代码下面的 Python 示例代码根据查询参数和 Secret Key 生成 sign
参数,并调用 解析一个或多个域名 API 向 HTTPDNS 服务端发送请求。
您需要自行把该示例代码保存为 resolve.py
。
# Python 3 import hashlib import sys import time import requests import pprint if len(sys.argv) < 4: print("Usage:") print(" python3 ./resolve.py <accountId> <secretKey> <domains> [cip] [type]") sys.exit() accountId=sys.argv[1] secretKey=sys.argv[2] domains=sys.argv[3] cip=sys.argv[4] if len(sys.argv) >= 5 else "" t=sys.argv[5] if len(sys.argv) == 6 else "" timeStamp=str(int(1000*(time.time()+3600))) # 生成签名参数 old=(secretKey, timeStamp, accountId, domains, cip, t) new=sorted(old) separator="_" newStr=separator.join(new) hl = hashlib.md5() hl.update(newStr.encode(encoding='utf-8')) qUrl="https://httpdns.volcengineapi.com/resolve?domain=" + domains + "&account_id=" + accountId + "&sign=" + hl.hexdigest() + "×tamp=" + timeStamp if len(cip) != 0: qUrl = qUrl + "&ip=" + cip if len(t) != 0: qUrl = qUrl + "&type=" + t print(qUrl) r = requests.get(qUrl) if r.status_code == 200: pprint.pprint(r.json()) else: print(r)
sign
参数如果您调用 获取最佳的 HTTPDNS 服务端 IP 地址 API 发送请求,您的请求中包含以下查询参数。同时,移动解析 HTTPDNS 的 Secret Key 是 secret_key
。
timestamp
account_id
svc_meta_ts
您可以参见以下步骤计算 sign
参数。
sign
参数。签名计算的伪代码如下:
sign = MD5(strings.join(sort(secret_key, timestamp, account_id, svc_meta_ts), "_"))
sign
参数计算示例假设您调用 获取最佳的 HTTPDNS 服务端 IP 地址 API 发送请求,假设您的请求中包含以下参数:
secret_key
: QlgAuFMwNUwNtimestamp
: 1566808387000account_id
: 1023svc_meta_ts
: 0sign
参数的计算方法为:MD5(0_1023_1566808387000_QlgAuFMwNUwN)
得到的 sign
参数为 0b93c934ff0283427b9fd7bfd40660e5
。
sign
参数计算示例代码下面的 Python 示例代码根据查询参数和 Secret Key 生成 sign
参数,并调用 获取最佳的 HTTPDNS 服务端 IP 地址 API 向 HTTPDNS 服务端发送请求。
您需要自行把该示例代码保存为 svc_meta.py
。
# Python 3 import hashlib import sys import time import requests import pprint if len(sys.argv) < 2: print("Usage:") print(" python3 ./svc_meta.py <accountId> <secretKey>") sys.exit() accountId=sys.argv[1] secretKey=sys.argv[2] svc_meta_ts = "0" timeStamp=str(int(1000*(time.time()+36000))) # 生成签名参数 old=(secretKey, timeStamp, accountId, svc_meta_ts) new=sorted(old) separator="_" newStr=separator.join(new) hl = hashlib.md5() hl.update(newStr.encode(encoding='utf-8')) qUrl="https://httpdns.volcengineapi.com/svc_meta?" + "svc_meta_ts=" + svc_meta_ts + "&account_id=" + accountId + "&sign=" + hl.hexdigest() + "×tamp=" + timeStamp print(qUrl) r = requests.get(qUrl) if r.status_code == 200: pprint.pprint(r.json()) else: print(r.json())