Wie kann ich eine HTTP POST-Anforderung an einen Server von Excel mit VBA schicken?
Frage
Was VBA-Code erforderlich, um einen HTTP-POST aus einer Excel-Tabelle durchführen?
Lösung
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 kann für eine größere Kontrolle über die HTTP-Anforderung können Sie WinHttp.WinHttpRequest.5.1
anstelle von MSXML2.ServerXMLHTTP
.
Andere Tipps
Wenn Sie es brauchen auf Mac und Windows zu arbeiten, 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
Weitere Informationen:
- In Bezug auf Ausgabe ... Ich weiß nicht, ob es möglich ist, die Ergebnisse zu der gleichen Zelle zurückzugeben, die die VBA-Funktion aufgerufen. In dem obigen Beispiel wird das Ergebnis in A2 geschrieben.
- Im Hinblick auf Eingabe ... Wenn Sie die Ergebnisse aktualisieren möchten, wenn Sie bestimmte Zellen ändern, stellen Sie sicher, dass diese Zellen das Argument für Ihre VBA-Funktion sind.
- Dies wird nicht für Mac 2008 auf Excel arbeiten, die VBA nicht haben. Excel für Mac 2011 bekam VBA zurück.
Für weitere Informationen können Sie meine vollständige Übersicht über „ mit Web sehen Dienstleistungen von Excel . "
Neben der anwser von Bill the Lizard :
Die meisten der Backends analysieren die rohen Post-Daten. In PHP zum Beispiel wird ein Array $ _POST, in denen einzelne Variablen innerhalb der Post-Daten gespeichert werden müssen. 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")
Ansonsten haben Sie die rohen Post-Daten auf die Variable "$ HTTP_RAW_POST_DATA" zu lesen.
Sie können ServerXMLHTTP in einem VBA-Projekt verwenden, indem Sie einen Verweis auf MSXML hinzugefügt wird.
- Öffnen Sie den VBA-Editor (in der Regel durch ein Makro bearbeiten)
- Gehen Sie auf die Liste der verfügbaren Referenzen
- Überprüfen Sie Microsoft XML
- Klicken Sie auf OK.
(von Referenzierung MSXML innerhalb VBA-Projekte )
Die ServerXMLHTTP MSDN-Dokumentation hat Einzelheiten über alle Eigenschaften und Methoden der ServerXMLHTTP.
Kurz aber es funktioniert im Grunde wie folgt:
Ich tat dies, bevor Sie die MSXML-Bibliothek und dann das XMLHttpRequest-Objekt. Siehe http://scriptorium.serve-it.nl/view.php?sid = 40