如何使用Power Query的Web.Contents发布multipart / form-data

时间:2015-02-06 08:35:47

标签: excel google-api google-analytics-api google-adwords powerquery

在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 个答案:

答案 0 :(得分:4)

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
编辑:我已经提出了一个使用Power Query进行多部分/表单数据的示例。它位于https://gist.github.com/CurtHagenlocher/b21ce9cddf54e3807317