Jaki kod VBA jest wymagany do wykonania HTTP POST z arkusza kalkulacyjnego Excel?
Jaki kod VBA jest wymagany do wykonania HTTP POST z arkusza kalkulacyjnego Excel?
Odpowiedzi:
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("")
Alternatywnie, aby uzyskać większą kontrolę nad żądaniem HTTP, możesz użyć WinHttp.WinHttpRequest.5.1
zamiast MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
czy nie. Dlatego używanie ich ze zmiennymi obiektowymi typu, który nie ma domyślnego elementu członkowskiego, powoduje błędy w czasie wykonywania; i użycie ich na obiekcie, który ma domyślny element członkowski, przekazuje wartość tego domyślnego elementu członkowskiego zamiast rzeczywistego obiektu.
Jeśli potrzebujesz go do pracy zarówno na Macu, jak i Windowsie, możesz użyć 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
Uwagi:
Aby uzyskać więcej informacji, zobacz moje pełne podsumowanie dotyczące „ korzystania z usług internetowych w programie Excel ”.
Oprócz odpowiedzi Billa Jaszczura :
Większość backendów analizuje nieprzetworzone dane post. Na przykład w PHP będziesz mieć tablicę, $_POST
w której będą przechowywane poszczególne zmienne w danych wiadomości. W takim przypadku musisz użyć dodatkowego nagłówka "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")
W przeciwnym razie musisz odczytać surowe dane postu dotyczące zmiennej "$HTTP_RAW_POST_DATA"
.
Możesz użyć ServerXMLHTTP
w projekcie VBA, dodając odwołanie do MSXML
.
- Otwórz edytor VBA (zwykle edytując makro)
- Przejdź do listy dostępnych referencji
- Sprawdź Microsoft XML
- Kliknij OK.
(z odniesienia do MSXML w projektach VBA )
Dokumentacja ServerXMLHTTP MSDN zawiera szczegółowe informacje o wszystkich właściwościach i metodach ServerXMLHTTP.
Krótko mówiąc, działa to zasadniczo w ten sposób:
- Wywołaj metodę otwartą , aby połączyć się ze zdalnym serwerem
- Zadzwoń wyślij, aby wysłać zapytanie.
- Przeczytaj odpowiedź przez responseXML , responseText , responseStream lub responseBody
Aby uzupełnić odpowiedź innych użytkowników:
W tym celu utworzyłem „WinHttp.WinHttpRequest.5.1” .
Wyślij żądanie wpisu z niektórymi danymi z Excela za pomocą 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")
Wyślij żądanie odbioru z uwierzytelnianiem tokenów z programu Excel za pomocą 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
, możesz to przeczytać tak: TCRequestItem.ResponseText
po wykonaniuTCRequestItem.send