如何使用 Power Query 的 Web.Contents POST multipart/form-data
How to POST a multipart/form-data using Power Query's Web.Contents
在 Power Query 中,我可以使用 Web.Contents 函数从 Web 下载数据,但是有一个 api 要求请求包含以下格式的 multipart/form 数据
"__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
header。
我尝试手动添加 content-type header 和 content-type=multipart/form-data
,但这也不起作用。在响应中相同 400 Bad Request
。
有什么想法吗?
multipart/form-data是一个相当复杂的编码,需要一堆MIME-specificheaders。我会首先尝试看看您是否可以使用 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
在 Power Query 中,我可以使用 Web.Contents 函数从 Web 下载数据,但是有一个 api 要求请求包含以下格式的 multipart/form 数据
"__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
header。
我尝试手动添加 content-type header 和 content-type=multipart/form-data
,但这也不起作用。在响应中相同 400 Bad Request
。
有什么想法吗?
multipart/form-data是一个相当复杂的编码,需要一堆MIME-specificheaders。我会首先尝试看看您是否可以使用 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