Welcher VBA-Code ist erforderlich, um einen HTTP-POST aus einer Excel-Tabelle auszuführen?
135
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:
Anmerkungen:
Für weitere Details können Sie meine vollständige Zusammenfassung über " Verwenden von Webdiensten aus Excel ".
quelle
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"
:Andernfalls müssen Sie die Rohdaten der Post für die Variable lesen
"$HTTP_RAW_POST_DATA"
.quelle
Sie können
ServerXMLHTTP
in einem VBA-Projekt verwenden, indem Sie einen Verweis auf hinzufügenMSXML
.(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:
quelle
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:
Senden Sie eine Get-Anfrage mit Token-Authentifizierung aus Excel mit VBA:
quelle
TCRequestItem Object
, Sie können sie wie folgt lesen:TCRequestItem.ResponseText
Nach dem AusführenTCRequestItem.send
Ich habe dies getan, bevor ich die MSXML-Bibliothek und dann das XMLHttpRequest-Objekt verwendet habe (siehe hier) .
quelle