2009-11-30 110 views
8

我有權訪問API。該API將XML帖子作爲輸入,然後用相關數據返回XML響應。從Excel和分析結果中執行HTTP發佈

我想

  1. 發送HTTP發送到服務器(認證,請求將被髮送在一起)
  2. 接收響應(其中一個選項要返回的CSV或XML)
  3. 將數據插入適當的行和列,然後使用數據透視表執行數據分析。

我沒有在Excel編程背景,但我坦然面對不同的Web腳本語言,HTML,CSS,Javascript代碼等

任何想法?

回答

6

可以使用此VBA代碼處理Excel請求端。

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 
6

如果你需要把你的輸入XML作爲郵件正文這裏是你如何能做到這一點。 您可能需要添加更多或更改請求標頭以使其適用於您。

使用DOMDocument對象可以輕鬆處理XML文檔。

添加項目引用;

  • 微軟的WinHTTP服務,5.1版
  • 微軟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 
+0

這看起來不錯。但是,我試圖理清我需要引用的內容,以便我可以使用這些變量類型。 「XMLHTTP」...等 – Scott 2009-12-18 18:11:00

+0

它看起來像我需要包括Microsoft XML? – Scott 2009-12-18 18:14:31

2

這是我最終使用:

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

我建議使用WinHttp.WinHttpRequest.5.1而不是MSXML2.XMLHTTP每當您需要Windows身份驗證時,因爲它允許您使用當前用戶憑據登錄。下面是一個例子

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