Quale codice VBA è necessario per eseguire un POST HTTP da un foglio di calcolo Excel?
Quale codice VBA è necessario per eseguire un POST HTTP da un foglio di calcolo Excel?
Risposte:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send("")
In alternativa, per un maggiore controllo sulla richiesta HTTP è possibile utilizzare WinHttp.WinHttpRequest.5.1
al posto di MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
o meno. Ecco perché usarli con variabili oggetto di un tipo che non ha un membro predefinito provoca errori di runtime; e il loro utilizzo su un oggetto che ha un membro predefinito, passa valore membro di predefinito anziché l'oggetto effettivo.
Se ne hai bisogno per funzionare su Mac e Windows, puoi usare QueryTables:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
.PostText = "origin_airport=MSN&destination_airport=ORD"
.RefreshStyle = xlOverwriteCells
.SaveData = True
.Refresh
End With
Appunti:
Per maggiori dettagli, puoi vedere il mio riepilogo completo su " utilizzo dei servizi Web da Excel ".
Oltre alla risposta di Bill the Lizard :
La maggior parte dei backend analizza i dati post non elaborati. In PHP, ad esempio, avrai un array $_POST
in cui verranno memorizzate le singole variabili all'interno dei dati di post. In questo caso devi usare un'intestazione aggiuntiva "Content-type: application/x-www-form-urlencoded"
:
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("var1=value1&var2=value2&var3=value3")
Altrimenti devi leggere i dati grezzi dei post sulla variabile "$HTTP_RAW_POST_DATA"
.
È possibile utilizzare ServerXMLHTTP
in un progetto VBA aggiungendo un riferimento a MSXML
.
- Apri l'editor VBA (di solito modificando una macro)
- Vai all'elenco dei riferimenti disponibili
- Controlla Microsoft XML
- Clicca OK.
(dal riferimento a MSXML nei progetti VBA )
La documentazione MSDN ServerXMLHTTP contiene dettagli completi su tutte le proprietà e i metodi di ServerXMLHTTP.
In breve, funziona sostanzialmente così:
- Chiamare il metodo aperto per connettersi al server remoto
- Chiama invia per inviare la richiesta.
- Leggi la risposta tramite responseXML , responseText , responseStream o responseBody
Per completare la risposta degli altri utenti:
Per questo ho creato un oggetto "WinHttp.WinHttpRequest.5.1" .
Invia una richiesta di post con alcuni dati da Excel utilizzando VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
Invia una richiesta get con autenticazione token da Excel utilizzando VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
, puoi leggerlo come: TCRequestItem.ResponseText
dopo aver fattoTCRequestItem.send