You need to enable JavaScript to run this app.
文档中心
TrafficRoute DNS 套件

TrafficRoute DNS 套件

复制全文
使用 HTTP API
HTTP 请求鉴权
复制全文
HTTP 请求鉴权

本文档介绍如何在调用 HTTP API 时,实现请求鉴权。
移动解析 HTTPDNS 的 HTTP API 通过查询参数中的 sign 参数进行请求鉴权。您需要自行计算 sign 参数的值。

计算 sign 参数所需的参数

您需要当前 API 的查询参数和 secret_key 来计算 sign 参数。

  • 查询参数:当前 API 的查询参数,不包含 sign 参数。
  • secret_key:移动解析 HTTPDNS 的 Secret Key。可以从控制台的 鉴权配置 页面获取。在您 开通 HTTPDNS 后,系统会自动生成一个 Secret Key。

对于不同的 API,您使用的查询参数也不同。本文档分别介绍了以下 API 的 sign 参数计算方法:

为解析一个或多个域名 API 计算 sign 参数

如果您调用 解析一个或多个域名 API 发送请求,您的请求中包含以下查询参数。同时,移动解析 HTTPDNS 的 Secret Key 是 secret_key

  • timestamp
  • account_id
  • domain
  • ip
  • type

您可以参见以下步骤计算 sign 参数。

  1. 将请求参数的值按照 ASCII 码从小到大排序。
  2. 用下划线将这些参数连接成一个字符串。
  3. 计算该字符串的 MD5 哈希值。该 MD5 哈希值即为当前请求的 sign 参数。

签名计算的伪代码如下:

sign = MD5(strings.join(sort(secret_key, timestamp, account_id, domain, ip, type), "_"))

sign 参数计算示例

假设您调用 解析一个或多个域名 API 发送请求,假设您的请求中包含以下参数:

  • secret_key: QlgAuFMwNUwN
  • timestamp: 1566808387000
  • account_id: 1023
  • domain: www.a.com,www.b.com
  • ip:请求中未包含
  • 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() + "&timestamp=" + 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)

为获取最佳的 HTTPDNS 服务端 IP 地址 API 计算 sign 参数

如果您调用 获取最佳的 HTTPDNS 服务端 IP 地址 API 发送请求,您的请求中包含以下查询参数。同时,移动解析 HTTPDNS 的 Secret Key 是 secret_key

  • timestamp
  • account_id
  • svc_meta_ts

您可以参见以下步骤计算 sign 参数。

  1. 将请求参数的值按照 ASCII 码从小到大排序。
  2. 用下划线将这些参数连接成一个字符串。
  3. 计算该字符串的 MD5 哈希值。该 MD5 哈希值即为当前请求的 sign 参数。

签名计算的伪代码如下:

sign = MD5(strings.join(sort(secret_key, timestamp, account_id, svc_meta_ts), "_"))

sign 参数计算示例

假设您调用 获取最佳的 HTTPDNS 服务端 IP 地址 API 发送请求,假设您的请求中包含以下参数:

  • secret_key: QlgAuFMwNUwN
  • timestamp: 1566808387000
  • account_id: 1023
  • svc_meta_ts: 0

sign 参数的计算方法为:
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()   + "&timestamp=" + timeStamp
print(qUrl)
r = requests.get(qUrl)
if r.status_code == 200:
    pprint.pprint(r.json())
else:
    print(r.json())
最近更新时间:2024.03.29 18:39:57
这个页面对您有帮助吗?
有用
有用
无用
无用