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.1zamiast MSXML2.ServerXMLHTTP.
objHTTP.responseText.
ByRefczy 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ę, $_POSTw 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ć ServerXMLHTTPw 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.ResponseTextpo wykonaniuTCRequestItem.send