2009-11-30 27 views
8

Ho accesso a un'API. L'API prende un post XML come input e quindi restituisce una risposta XML con i dati rilevanti.Esegui post HTTP da Excel e risultati Parse

voglio

  1. Inviare il HTTP POST al server (autenticazione e richiesta sarà inviata insieme)
  2. ricevere la risposta (Una delle opzioni da restituire è CSV o XML)
  3. Inserire i dati nelle righe e nelle colonne appropriate e quindi eseguire l'analisi dei dati utilizzando le tabelle pivot.

io non ho un background di programmazione in Excel, ma a mio agio con diversi linguaggi di scripting web, HTML, CSS, Javascript ecc

Tutte le idee?

risposta

6

Il lato di richiesta Excel può essere gestito con questo codice 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 
6

Se è necessario inviare il proprio input xml come corpo del messaggio, ecco come è possibile farlo. Potrebbe essere necessario aggiungere altro o modificare le intestazioni di richiesta per farlo funzionare correttamente.

L'utilizzo dell'oggetto DOMDocument facilita il lavoro con i documenti xml.

Aggiungere riferimenti a un progetto;

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

Esempio:

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

Questo sembra buono. Tuttavia, sto cercando di risolvere ciò di cui ho bisogno per fare riferimento in modo da poter usare questi tipi di variabili. "XMLHTTP" ... ecc. – Scott

+0

Sembra che sia necessario includere Microsoft XML? – Scott

2

Questo è quello che ho finito per usare:

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

Suggerisco di usare WinHttp.WinHttpRequest.5.1 anziché MSXML2.XMLHTTP ogni volta che è necessaria l'autenticazione di Windows, poiché consente di utilizzare le credenziali utente correnti per accedere. Ecco un esempio

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

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