Jak mogę wysłać żądanie HTTP POST do serwera z programu Excel przy użyciu VBA?
Jaki kod VBA jest wymagany do wykonania postu HTTP z arkusza kalkulacyjnego Excel?
5 answers
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, dla większej kontroli nad żądaniem HTTP można użyć WinHttp.WinHttpRequest.5.1
w miejsce MSXML2.ServerXMLHTTP
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 15:49:54
Jeśli potrzebujesz go do pracy zarówno na Mac jak i Windows, 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:
- odnośnie wyjścia... Nie wiem, czy możliwe jest zwrócenie wyników do tej samej komórki, która wywołała funkcję VBA. W powyższym przykładzie wynik jest zapisywany do formatu A2.
- odnośnie wejścia... Jeśli chcesz, aby wyniki odświeżały się po zmianie niektórych komórek, upewnij się, że te komórki są argumentem funkcji VBA.
- to nie zadziała na Excelu dla Mac 2008, który nie ma VBA. Excel for Mac 2011 dostał VBA z powrotem.
Aby uzyskać więcej szczegółów, możesz zobaczyć moje pełne podsumowanie na temat " korzystanie z usług internetowych z Excela."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 17:07:15
Oprócz anwsera Bill The Lizard :
Większość backendów przetwarza surowe dane post. Na przykład w PHP będziesz miał tablicę $_POST, w której będą przechowywane poszczególne zmienne w danych post. W tym 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 w zmiennej "$HTTP_RAW_POST_DATA".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:32
Możesz użyć ServerXMLHTTP w projekcie VBA, dodając odniesienie do MSXML.
- Otwórz Edytor VBA (Zwykle edytując Makro)
- Przejdź do listy dostępnych referencji
- Sprawdź Microsoft XML
- Kliknij OK.
(z odwołanie do MSXML w projektach VBA )
Dokumentacja ServerXMLHTTP MSDN zawiera pełne informacje o wszystkich właściwościach i metodach ServerXMLHTTP.
Krótko mówiąc, działa zasadniczo tak:
- wywołanie otwórz metodę aby połączyć się ze zdalnym serwerem
- zadzwoń wyślij Aby wysłać zapytanie.
- odczytaj odpowiedź przez responseXML, responseText, responseStream lub responseBody
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 11:39:31
Zrobiłem to przed użyciem biblioteki MSXML, a następnie przy użyciu obiektu XMLHttpRequest. Zobacz http://scriptorium.serve-it.nl/view.php?sid=40
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 17:03:18