0

我正在尝试从 REST API 获取数据并将 json 字符串保存到 DataLake 中,但出现错误。我已经按照这里提到的步骤 https://docs.microsoft.com/en-us/azure/data-factory/connector-rest & https://www.alexvolok.com/2019/adfv2-rest-api-第 1 部分-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 数据湖存储。

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

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

请告知我是否做错了什么。

4

1 回答 1

0

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

所以对于那些正在寻找答案的人来说。

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

于 2020-07-29T08:08:14.050 回答