Jaki kod VBA jest wymagany do wykonania żądania HTTP POST z arkusza kalkulacyjnego Excel?Jak mogę wysłać żądanie HTTP POST do serwera z Excela używając VBA?
Odpowiedz
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 lepszej kontroli nad żądania HTTP można wykorzystać WinHttp.WinHttpRequest.5.1
zamiast MSXML2.ServerXMLHTTP
.
Możesz użyć ServerXMLHTTP w projekcie VBA, dodając odniesienie do MSXML.
- Otwórz Edytor VBA (zwykle poprzez edycję makra)
- Przejdź do listy Dostępne Odniesienia
- wyboru Microsoft XML
- Kliknij OK.
(z Referencing MSXML within VBA Projects)
ServerXMLHTTP MSDN documentation ma pełne dane o wszystkich właściwościach i sposoby ServerXMLHTTP.
Krótko mówiąc jednak, to działa w zasadzie tak:
- połączeń open sposób, aby połączyć się ze zdalnym serwerem
- Wezwania send wysłać żądanie.
- Przeczytaj odpowiedź poprzez responseXML, responseText, responseStream lub responseBody
ten link używa jscript, a nie VBA –
Dzięki @JohnHenckel. Wprowadziłem kilka zmian, aby zaktualizować tę odpowiedź. –
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
Jeśli jest to potrzebne do pracy na komputerach Mac i Windows, można użyć QueryTable:
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:
- chodzi o wyjście ... Nie wiem, czy to możliwe zwróć wyniki do tej samej komórki, która nazywa się funkcją VBA. W powyższym przykładzie wynik zapisywany jest na A2.
- Jeśli chodzi o dane wejściowe ... Jeśli chcesz odświeżyć wyniki po zmianie niektórych komórek, upewnij się, że te komórki są argumentem funkcji VBA.
- To nie zadziała w programie Excel na Mac 2008, który nie ma VBA. Excel 2011 dla komputerów Mac otrzymał VBA.
Aby uzyskać więcej informacji, można zobaczyć moje pełne podsumowanie dotyczące "using web services from Excel."
+1: Potrzebuję go tylko w systemie Windows, ale rozwiązanie wieloplatformowe może przynieść korzyść komuś innemu. –
Nie sądzę, że faktycznie można uzyskać dostęp do kodu HTML, można uzyskać tylko informacje na temat renderowanej strony internetowej (nie rzeczywisty kod HTML) – user1493046
+1 dla rozwiązania wieloplatformowego i +1 (gdybym mógł) dla pełne podsumowanie z linkiem i wszystkim. Dzięki!! –
Oprócz anwser z Bill the Lizard:
Większość backendów analizować nieprzetworzone dane POST. W PHP na przykład, będziesz mieć tablicę $ _POST, w której będą przechowywane poszczególne zmienne w danych postu.W tym przypadku trzeba 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 trzeba czytać surowych danych post na zmiennej "$ HTTP_RAW_POST_DATA".
Próbuję opublikować tę prośbę (z nawiasami klamrowymi) i uzyskać błędy kompilacji ... może ci pomóc: "{" request ": {" carName ":" Honda "," model ":" 1A5 "}}" – fiddle
- 1. Jak wysłać żądanie POST?
- 2. Żądanie HTTPS POST przy użyciu VBA dla Excela
- 3. Jak mogę wysłać żądanie z parametrami GET i POST?
- 4. jak wysłać żądanie http z linii poleceń
- 5. Jak wysłać żądanie HTTP POST i otrzymać odpowiedź?
- 6. Jak wysłać żądanie POST jako JSON?
- 7. Jak mogę utworzyć żądanie HTTP z serwera SQL?
- 8. Żądanie Alamofire http do lokalnego serwera WWW
- 9. Jak wysłać żądanie POST w RestSharp?
- 10. Czy można wysłać żądanie POST w kolbie?
- 11. Jak wykonać żądanie HTTP POST w ASP?
- 12. http post - jak wysłać nagłówek autoryzacji?
- 13. Jak wysłać żądanie HTTP za pomocą Telnet
- 14. Jak wysłać żądanie HTTP/1.0 przez urllib2?
- 15. Jak wysłać żądanie SOAP?
- 16. Jak wysłać żądanie POST z x-www-form-urlencoded ciała
- 17. Apache HTTPClient Streaming żądanie HTTP POST?
- 18. Jak napisać kolekcję VBA do arkusza Excela
- 19. Jak wysłać żądanie HTTP POST dla wielu formatów/formularzy z C#
- 20. Wyślij JSON jako żądanie POST do serwera przez AsyncHttpClient
- 21. Test Java Junit Żądanie HTTP POST
- 22. Jak napisać żądanie HTTP
- 23. Żądanie Ajax zwraca błąd HTTP 500, używając MVC i połączenia $ .ajax z POST?
- 24. Jak wysłać dane przez POST używając w Zend_Rest_Client
- 25. Jak wysłać żądanie POST wieloczęściowe za pomocą HttpURLConnection w java?
- 26. Jak wysłać pliki przez HTTP_POST z Excelem za pomocą VBA?
- 27. Jak symulować żądanie POST?
- 28. Jak utworzyć żądanie HTTP Python z danymi POST i Cookie?
- 29. Jak wysłać plik przez HTTP, dobry sposób, używając Pythona?
- 30. Reagowanie na idempotentne żądanie HTTP POST
Aby uzyskać większą kontrolę nad żądaniem HTTP, można użyć "WinHttp.WinHttpRequest.5.1" zamiast "MSXML2.ServerXMLHTTP" –
Warto zauważyć, że można również użyć tego do wydania komunikatu HTTP PUT, zmieniając "POST" na "PUT". Treść do PUT idzie w metodzie .send(). Wszelkie dodatkowe nagłówki, które musisz ustawić, można również wykonać za pomocą następującej składni użytej w przykładzie User-Agent. – radicand
Nie używaj nawiasów wokół parametrów, jeśli nie używasz wartości zwracanej przez Sub: VBA Składnia nie pozwala na nawiasy wokół parametrów Sub (są one potrzebne dla funkcji), więc nawiasy te są w rzeczywistości arytmetycznymi nawiasami używanymi do wyjaśnienia pierwszeństwa operatora . Oprócz tego, że jest on mylący i niejasny, może to doprowadzić do błędu runtime, jeśli argument jest obiektem. I choć nie jest to wyraźnie wymagane, zwykle chciałbyś użyć odpowiedzi HTTP, którą możesz wspomnieć, można pobrać za pomocą 'objHTTP.responseText'. – Leviathan