Vba 中的 Http 发布

Posted

技术标签:

【中文标题】Vba 中的 Http 发布【英文标题】:Http Post in Vba 【发布时间】:2011-04-27 04:22:10 【问题描述】:

我想弄清楚如何在 VBA 中进行 POST。 理想情况下,我正在寻找一个可以玩的简单工作示例。 这是我到目前为止所拥有的,但我不确定如何处理它。主要是 formdata 的样子。

Function WinHTTPPostRequest(URL, formdata, Boundary)
  Dim http 

  Set http = CreateObject("MSXML2.XMLHTTP")

  http.Open "POST", URL, False

  'Set Content-Type header'
  http.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + Boundary

  'Send the form data To URL As POST binary request'
  http.send formdata

  'Get a result of the script which has received upload'
  WinHTTPPostRequest = http.responseText
End Function

编辑:

所以我安装了 firebug,以便我可以获取“formdata”的对象名称(参见代码)。我原以为 formdata 看起来像这样“Form1=A&Form2=B”。但它仍然没有成功。关于我应该如何做得更好的任何建议?

编辑: 所以看起来我可能需要在我的 POST 请求中发送隐藏字段。

【问题讨论】:

下载 Fiddler 以便您可以调试/解码 HTTP 请求。你可能只是错过了一些简单的东西。 【参考方案1】:

下载 Fiddler 以便您可以调试/解码 HTTP 请求。你可能只是错过了一些简单的东西。

此外,在 MSDN 库中搜索“HTTP POST VBA”时,有许多结果。 (http://social.msdn.microsoft.com/Search/en-US?query=%2BHTTP%20%2BPOST%20%2BVBA%20-***%20-social&ac=8)。 (排除内容时似乎是一个“错误”,所以我在查询中排除了***和社交结果。)

如何使用 XMLHTTP 或 ServerXMLHTTP 对象提交表单数据http://support.microsoft.com/kb/290591 使用 VBScript,但很容易转换为 vBA。

【讨论】:

【参考方案2】:

要以您建议的格式(即与 GET 请求相同)发送表单数据,我认为您需要将 Content-Type 标头设置为“application/x-www-form-urlencoded”。

如果您需要发送更复杂的数据(例如,包括文件上传或其他二进制数据),最好将 Content-Type 设置为“multipart/form-data”。如何格式化请求正文的详细信息在RFC 2388 中列出,但您最好找到一个可以为您完成的库。完全正确地格式化可能会很棘手,除非您将其作为一种学习体验,否则无需重新发明***。

【讨论】:

以上是关于Vba 中的 Http 发布的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA中的文件保存对话框

如何使用 VBA 通过 HTTP 发布上传 zip 文件?

VBA-从IE中的部分中提取段落

使用 VBA 将 XML 网站导入 Access

在 VBA HTTP Post 请求中传递参数

连接字符串的 VBA 问题