如何使用 Power Query 的 Web.Contents 发布多部分/表单数据

Posted

技术标签:

【中文标题】如何使用 Power Query 的 Web.Contents 发布多部分/表单数据【英文标题】:How to POST a multipart/form-data using Power Query's Web.Contents 【发布时间】:2015-02-06 08:35:46 【问题描述】:

在 Power Query 中,我可以使用 Web.Contents 函数从 Web 下载数据,但是有一个 api 要求请求包含以下格式的多部分/表单数据

"__rdxml"=<*Some data*>

那么如何使用 Web.Contents 函数来做到这一点呢?

我试过了,做

...
PostContent = "__rdxml=<*Some data*>",
Source Web.Contents(url,Content=Text.ToBinary(PostContent))
...

但是服务器响应400 Bad Request

我用 Fiddler 检查了原始请求,似乎请求没有使用content-type=multipart/form-data 标头发送。

我尝试使用content-type=multipart/form-data 手动添加内容类型标头,但这也不起作用。回复中的 400 Bad Request 相同。

有什么想法吗?

【问题讨论】:

【参考方案1】:

multipart/form-data 是一种相当复杂的编码,需要一堆特定于 MIME 的标头。我会先尝试看看您是否可以改用 application/x-www-form-urlencoded:

let
    actualUrl = "http://some.url",
    record = [__rdxml="some data"],
    body = Text.ToBinary(Uri.BuildQueryString(record)),
    options = [Headers =[#"Content-type"="application/x-www-form-urlencoded"], Content=body],
    result = Web.Contents(actualUrl, options)
in
    result

编辑:我提出了一个将 multipart/form-data 与 Power Query 结合使用的示例。在https://gist.github.com/CurtHagenlocher/b21ce9cddf54e3807317

【讨论】:

如果正文中需要多个值,可以在记录中将它们作为逗号分隔值添加为值数组。此外,为了便于阅读,请放在下一行。即记录 = [field1="一些数据", field2="一些数据"]

以上是关于如何使用 Power Query 的 Web.Contents 发布多部分/表单数据的主要内容,如果未能解决你的问题,请参考以下文章

Power BI Python 在Power BI Desktop中Python代码如何使用Power Query数据

Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?

如何将指数平滑模型预测值获取到 POWER BI/POWER Query 数据集?

如何等待 Power Query 刷新完成?

power query展开表时动态获取要展开的列

如何像 Power Query 一样使用 VBA 取消固定数量的列