在Excel中执行HTTP发布并parsing结果

我可以访问一个API。 API将XMLpost作为input,然后返回包含相关数据的XML响应。

我要

  1. 发送HTTP POST到服务器(身份validation和请求将一起发送)
  2. 接收响应(要返回的选项之一是CSV或XML)
  3. 将数据插入适当的行和列,然后使用数据透视表执行数据分析。

我没有在Excel中的编程背景,但对不同的网页脚本语言,HTML,CSS,Javascript等感到舒服。

有任何想法吗?

Excel请求端可以用这个VBA代码来处理。

Sub GetStuff() Dim objXML As Object Dim strData As String Dim strResponse As String strData = "Request" Set objXML = CreateObject("MSXML2.XMLHTTP") objXML.Open "POST", "www.example.com/api?" & strData, False objXML.Send strResponse = objXML.responsetext MsgBox strResponse End Sub 

如果你需要发送你的inputxml作为消息体,这里是你如何做到这一点。 您可能需要添加更多或更改请求标头才能为您工作。

使用DOMDocument对象可以轻松处理XML文档。

添加一个项目引用;

  • Microsoft WinHTTP服务,版本5.1
  • Microsoft XML,v6.0

例:

 Dim xmlInput As String xmlInput = "<YourXmlRequest></YourXmlPayload>" Dim oXmlHttp As MSXML2.XMLHTTP60 Set oXmlHttp = New MSXML2.XMLHTTP60 oXmlHttp.Open "POST", serviceURL, False, "UserName", "Password" oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" oXmlHttp.setRequestHeader "Connection", "Keep-Alive" oXmlHttp.setRequestHeader "Accept-Language", "en" oXmlHttp.send xmlInput Debug.Print oXmlHttp.responseText Dim oXmlReturn As MSXML2.DOMDocument60 Set oXmlReturn = New MSXML2.DOMDocument60 oXmlReturn.loadXML oXmlHttp.responseText 

这是我最终使用的:

 Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") objHTTP.Open "POST", urlPath, False objHTTP.setRequestHeader "Content-Type", "text/xml" objHTTP.send (request) 

我build议使用WinHttp.WinHttpRequest.5.1而不是MSXML2.XMLHTTP ,因为它允许您使用当前用户凭证login。 这是一个例子

 Dim http As Object Set http = CreateObject("WinHttp.WinHttpRequest.5.1") http.SetAutoLogonPolicy 0 http.Open "POST", "http://myUrl.html?param1=value1", False http.setRequestHeader "Content-Type", "text/json" http.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405" http.send ("") 

参考: https : //github.com/VBA-tools/VBA-Web/issues/15