如何使用 ADF Web Activity 在 POST 正文中发送表单数据

问题描述 投票:0回答:1

我最近从事一项任务,必须使用 ADF 从 API 中提取数据。 API 使用不记名令牌进行身份验证并使用表单数据生成令牌。该 API 需要用户名和密码作为 POST Web 活动请求中的 Body form-data,如邮递员 UI 中所示

我没有获得太多有关如何使用 ADF Web 活动传递表单数据的信息,因此考虑提供对我有用且可能对其他人有用的解决方案。

azure azure-data-factory
1个回答
0
投票

链接 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition] 提供有关发送表单数据的语法和格式的信息。

下面是链接中的 HTML 表单示例,基于此我创建了 ADF 的正文请求格式

POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"

--boundary
Content-Disposition: form-data; name="field1"

value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--boundary--

对于 ADF POST Web 活动,我们需要标头和正文。这是多部分表单数据,并且由于正文可以包含许多值,因此您需要一个用于分隔它们的边界。

为了设置边界,我使用 NEWID() 生成了 GUID 并删除了连字符 (-)

设置多部分表单数据的以下标头要求以及 API 所需的其他标头。

multipart/form-data; boundary=B0769B09344440F5B6373793F80F87F8

使用标题中传递的边界设置正文,并小心“ “ 或者 ” “在主体结构中。一些 API 支持两者,在我的情况下它仅支持换行” "。还请注意边界中 2 个连字符 (--) 的使用,特别是最后一个以 (--) 开头和结尾的边界。 我使用了 2 个变量 varUsername 和 varPassword 来传递用户名和密码的值。

@concat('
--B0769B09344440F5B6373793F80F87F8
Content-Disposition: form-data; name="username"
Content-Type: text/csv

',variables('varUserName'),'
--B0769B09344440F5B6373793F80F87F8
Content-Disposition: form-data; name="password"
Content-Type: text/csv

',variables('varPassword'),'
--B0769B09344440F5B6373793F80F87F8--
')

主体表达式的 ADF JSON 代码如下所示

"body": {
                        "value": "@concat('\n--B0769B09344440F5B6373793F80F87F8\nContent-Disposition: form-data; name=\"username\"\nContent-Type: text/csv\n\n',variables('varUserName'),'\n--B0769B09344440F5B6373793F80F87F8\nContent-Disposition: form-data; name=\"password\"\nContent-Type: text/csv\n\n',variables('varPassword'),'\n--B0769B09344440F5B6373793F80F87F8--\n')",
                        "type": "Expression"
                    }

我希望这对某人有用。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.