Jaki kod VBA jest wymagany do wykonania HTTP POST z arkusza kalkulacyjnego Excel?
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("")
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:
Uwagi:
Aby uzyskać więcej informacji, zobacz moje pełne podsumowanie dotyczące „ korzystania z usług internetowych w programie Excel ”.
źródło
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"
:W przeciwnym razie musisz odczytać surowe dane postu dotyczące zmiennej
"$HTTP_RAW_POST_DATA"
.źródło
Możesz użyć
ServerXMLHTTP
w projekcie VBA, dodając odwołanie doMSXML
.(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:
źródło
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:
Wyślij żądanie odbioru z uwierzytelnianiem tokenów z programu Excel za pomocą VBA:
źródło
TCRequestItem Object
, możesz to przeczytać tak:TCRequestItem.ResponseText
po wykonaniuTCRequestItem.send
Zrobiłem to przed użyciem biblioteki MSXML, a następnie używając obiektu XMLHttpRequest, patrz tutaj .
źródło