如何使用datafactory从RestAPI复制数据并将其保存在Datalake中?

时间:2020-07-27 14:33:08

标签: azure azure-data-factory azure-data-factory-2

我正在尝试从REST API中获取数据并将json字符串保存到DataLake中,但出现错误。我已经按照这里提到的步骤进行了 https://docs.microsoft.com/en-us/azure/data-factory/connector-resthttps://www.alexvolok.com/2019/adfv2-rest-api-part1-oauth2/

我要连接的API使用OAuth2,因此我需要先获取访问令牌,然后执行获取请求以获取实际数据。

下面是我要遵循的步骤

  1. 在管道中创建Web HTTP请求,并在请求正文中传递client_ID,客户端机密,用户名,密码和授予类型。当我调试管道时,我确实获得了步骤2中所需的Access_token。

  2. 在第二步中,我有一个复制活动,该活动使用Web的输出(access_token)来验证第二个REST GET请求,但这是我面临的许多问题。我正在使用的代码是“ @concat('Bearer',activity('GetAccessToken')。output.access_token)”

  3. 在第3步中,我有两个数据集和2个链接服务,数据集1是一个REST数据集,具有链接到REST链接服务的基本URL和相对URL,然后接收器数据集连接到AZURE datalake存储。

  4. 在源数据集中,我传递了附加的标头Authorization = @concat('Bearer',activity('GetAccessToken')。output.access_token),理想情况下,如果没有,我要调用的API将返回空发送参数,以便我在“请求正文”中传递参数,这是否正确?请求正文将类似于“ start_date = 2020/07/17&end_date = 2020/07/18”。

  5. 接收器是存储在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": []
}

请告知我是否做错了事。

1 个答案:

答案 0 :(得分:0)

我知道这是一个简单的问题,

所以对于正在寻找答案的人。

请确保REST Source URL以HTTPS://而不是HTTP://开头。我猜Azure不会将标头传递给以HTTP://开头的url,这很奇怪,因为POSTMAN和python脚本发送没有问题标头。