在Excel中执行HTTP发布并parsing结果
我可以访问一个API。 API将XMLpost作为input,然后返回包含相关数据的XML响应。
我要
- 发送HTTP POST到服务器(身份validation和请求将一起发送)
- 接收响应(要返回的选项之一是CSV或XML)
- 将数据插入适当的行和列,然后使用数据透视表执行数据分析。
我没有在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