【发布时间】:2022-11-18 14:51:11
【问题描述】:
我有一个用例,其中我需要连接到 API 以请求数据。
- API 需要有效的令牌来处理请求。
- 为了生成令牌,我有一个帐户代码和密钥
假设 BaseURL 为BaseURL - http://api.xxxxx.com/{accountCode}/data(需要传递账号的值)
**需要运行以下 Python/Java 脚本来获取 dateToken 和令牌
- 如果我们使用 Python 3.6 或更高版本。下面是代码-**
- 开始 - {
import time
import requests
from hashlib import md5
account_code = "<account_name>"
key = "<api_key>"
actual_unix_time = int(time.time_ns() / 1000) # in milliseconds
TTL = 31536000000 # for 1 year
expiration_time = actual_unix_time + TTL
base_url = "https://api.xxxxx.com"
url = f"/{account_code}/data?fromDate=last6Hours&granularity=minute&type=ALL%2CVOD%2CLIVE&operation=reduceJoin&metrics=bufferratio"
pre_url = f"{url}&dateToken={expiration_time}"
token_generated = md5(f"{pre_url}{key}".encode('utf-8'))
token_value = token_generated.hexdigest()
request_url = f"{base_url}{pre_url}&token={token_value}"
response = requests.get(request_url)
print(response)
print(response.text)
} - 结尾 -
- 如果我们使用 Java。下面是代码 -
- 开始 - {
var key = pm.environment.get("NPAW-API-KEY");
var base_url = "https://api.xxxxx.com";
var url = pm.request.url.toString();
var path = url.replace(base_url, '');
var pre_url = pm.variables.replaceIn(path);
var moment = require('moment');
var actual_unix_time = moment().unix()*1000;
var TTL = 31536000000
var expiration_time = (actual_unix_time + TTL);
var pre_url = pre_url+"&dateToken="+expiration_time;
var token_generated = CryptoJS.MD5(pre_url + key).toString();
var token_value = token_generated;
var request_url = (base_url+pre_url+'&token='+token_value).toString();
} - 结尾 -
我尝试使用 Postman,其中,我可以在 Pre-Request 脚本中传递上述脚本,并为 accountCode 和 Secret Key 设置环境变量,我能够达到预期的结果。
问题:如何在 Azure 数据工厂中实现这一目标?
【问题讨论】:
-
您能否澄清一下:您想使用 python/java 脚本获取帐户代码和令牌(以构建 URL)?问题是如何在 ADF 中执行此操作?或者python代码直接给出需要的响应,而你想在ADF中实现?如我错了请纠正我。
-
嗨@Saideep,是的,获取 dateToken 和令牌 - 我需要使用上面的代码。相同的代码还为我提供了一个带有日期标记和标记的 URL,我可以使用它来获取所需的输出。
-
那么,你想在 ADF 中实现这个逻辑吗?就像在 ADF 中使用 dateToken 和令牌构建 URL 并调用 URL?或者您只想使用上面的脚本本身?
-
我想构建 URL 并将其保存到一个变量中,我可以进一步使用它来调用