2009-11-30 11 views
8

Ich habe Zugriff auf eine API. Die API nimmt einen XML-Post als Eingabe und gibt dann eine XML-Antwort mit den relevanten Daten zurück.HTTP-Post innerhalb von Excel durchführen und Ergebnisse analysieren

Ich möchte

  1. Senden Sie die HTTP Post an den Server
  2. die Antwort erhalten (Authentifizierung und Antrag wird zusammen gesendet) (Eine der Optionen zurückgegeben werden soll CSV oder XML)
  3. Fügen Sie die Daten in die entsprechenden Zeilen und Spalten ein und führen Sie dann eine Datenanalyse mit Pivot-Tabellen durch.

Ich habe keine Programmierkenntnisse in Excel aber bin bequem mit verschiedenen Web-Skriptsprachen, HTML, CSS, Javascript usw.

Irgendwelche Ideen?

Antwort

6

Die Excel-Anfrage Seite kann mit diesem VBA-Code behandelt werden.

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

Wenn Sie Ihre Eingabe XML senden müssen, wie der Nachrichtentext hier ist, wie Sie es tun können. Möglicherweise müssen Sie weitere hinzufügen oder die Anforderungsheader ändern, damit sie für Sie funktionieren.

Mithilfe des DOMDocument-Objekts können Sie problemlos mit Ihren XML-Dokumenten arbeiten.

Fügen Sie eine Projektverweise zu;

  • Microsoft WinHTTP Services Version 5.1
  • Microsoft XML, v6.0

Beispiel:

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

Das sieht gut aus. Ich versuche jedoch herauszufinden, was ich referenzieren muss, damit ich diese Variablentypen verwenden kann. "XMLHTTP" ... usw. – Scott

+0

Es sieht so aus, als müsste ich das Microsoft XML einbinden? – Scott

2

Dies ist, was ich am Ende mit:

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

Ich empfehle,zu verwendenanstelle von MSXML2.XMLHTTP immer dann, wenn Sie die Windows-Authentifizierung benötigen, da Sie damit die Anmeldeinformationen des aktuellen Benutzers verwenden können. Hier ist ein Beispiel

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 ("") 

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

Verwandte Themen