我最近从事一项任务,必须使用 ADF 从 API 中提取数据。 API 使用不记名令牌进行身份验证并使用表单数据生成令牌。该 API 需要用户名和密码作为 POST Web 活动请求中的 Body form-data,如邮递员 UI 中所示
我没有获得太多有关如何使用 ADF Web 活动传递表单数据的信息,因此考虑提供对我有用且可能对其他人有用的解决方案。
链接 [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"
}
我希望这对某人有用。
谢谢