我正在尝试从REST API中获取数据并将json字符串保存到DataLake中,但出现错误。我已经按照这里提到的步骤进行了 https://docs.microsoft.com/en-us/azure/data-factory/connector-rest和https://www.alexvolok.com/2019/adfv2-rest-api-part1-oauth2/
我要连接的API使用OAuth2,因此我需要先获取访问令牌,然后执行获取请求以获取实际数据。
下面是我要遵循的步骤
在管道中创建Web HTTP请求,并在请求正文中传递client_ID,客户端机密,用户名,密码和授予类型。当我调试管道时,我确实获得了步骤2中所需的Access_token。
在第二步中,我有一个复制活动,该活动使用Web的输出(access_token)来验证第二个REST GET请求,但这是我面临的许多问题。我正在使用的代码是“ @concat('Bearer',activity('GetAccessToken')。output.access_token)”
在第3步中,我有两个数据集和2个链接服务,数据集1是一个REST数据集,具有链接到REST链接服务的基本URL和相对URL,然后接收器数据集连接到AZURE datalake存储。
在源数据集中,我传递了附加的标头Authorization = @concat('Bearer',activity('GetAccessToken')。output.access_token),理想情况下,如果没有,我要调用的API将返回空发送参数,以便我在“请求正文”中传递参数,这是否正确?请求正文将类似于“ start_date = 2020/07/17&end_date = 2020/07/18”。
接收器是存储在DataLake中的简单Json数据集。
当我尝试调试时,出现以下错误
但是我收到以下错误
{
"errorCode": "2200",
"message": "Failure happened on 'Source' side. ErrorCode=UserErrorHttpStatusCodeIndicatingFailure,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The HttpStatusCode 401 indicates failure. { \"Error\": { \"Message\":\"Authentication failed: Invalid headers\", \"Server-Time\":\"2020-07-27T06:59:24\", \"Id\":\"6AAF87BC-5634-4C28-8626-810A19B86BFF\" } },Source=Microsoft.DataTransfer.ClientLibrary,'",
"failureType": "UserError",
"target": "CopyDataFromAPI",
"details": []
}
请告知我是否做错了事。
答案 0 :(得分:0)
我知道这是一个简单的问题,
所以对于正在寻找答案的人。
请确保REST Source URL以HTTPS://而不是HTTP://开头。我猜Azure不会将标头传递给以HTTP://开头的url,这很奇怪,因为POSTMAN和python脚本发送没有问题标头。