Welcher VBA-Code ist erforderlich, um einen HTTP-POST aus einer Excel-Tabelle auszuführen?
Welcher VBA-Code ist erforderlich, um einen HTTP-POST aus einer Excel-Tabelle auszuführen?
Antworten:
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("")
Alternativ können Sie für eine bessere Kontrolle über die HTTP-Anforderung WinHttp.WinHttpRequest.5.1
anstelle von verwenden MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
oder nicht. Aus diesem Grund führt die Verwendung mit Objektvariablen eines Typs ohne Standardelement zu Laufzeitfehlern. Wenn Sie sie für ein Objekt verwenden, das ein Standardmitglied hat, wird der Wert dieses Standardmitglieds anstelle des tatsächlichen Objekts übergeben.
Wenn Sie es für Mac und Windows benötigen, können Sie QueryTables verwenden:
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
Anmerkungen:
Für weitere Details können Sie meine vollständige Zusammenfassung über " Verwenden von Webdiensten aus Excel ".
Neben der Antwort von Bill the Lizard :
Die meisten Backends analysieren die Rohdaten der Post. In PHP haben Sie beispielsweise ein Array, $_POST
in dem einzelne Variablen in den Post-Daten gespeichert werden. In diesem Fall müssen Sie einen zusätzlichen Header verwenden "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")
Andernfalls müssen Sie die Rohdaten der Post für die Variable lesen "$HTTP_RAW_POST_DATA"
.
Sie können ServerXMLHTTP
in einem VBA-Projekt verwenden, indem Sie einen Verweis auf hinzufügen MSXML
.
- Öffnen Sie den VBA-Editor (normalerweise durch Bearbeiten eines Makros).
- Gehen Sie zur Liste der verfügbaren Referenzen
- Überprüfen Sie Microsoft XML
- OK klicken.
(aus Referenzieren von MSXML in VBA-Projekten )
Die ServerXMLHTTP-MSDN-Dokumentation enthält ausführliche Informationen zu allen Eigenschaften und Methoden von ServerXMLHTTP.
Kurz gesagt, es funktioniert im Grunde so:
- Anruf offen Methode auf, um eine Verbindung zum Remote-Server herzustellen
- Anruf senden an, um die Anfrage zu senden.
- Lesen Sie die Antwort über responseXML , responseText , responseStream oder responseBody
So vervollständigen Sie die Antwort der anderen Benutzer:
Dafür habe ich ein "WinHttp.WinHttpRequest.5.1" Objekt erstellt.
Senden Sie eine Post-Anfrage mit einigen Daten aus Excel mit 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")
Senden Sie eine Get-Anfrage mit Token-Authentifizierung aus Excel mit 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
, Sie können sie wie folgt lesen: TCRequestItem.ResponseText
Nach dem AusführenTCRequestItem.send