Visual Basic for Applications:
Wysyłanie żądania HTTP

Jak to zrobić:

Kluczem do wysyłania zapytania HTTP w VBA jest wykorzystanie biblioteki Microsoft XML, w wersji 6.0 (lub starszych wersji, w zależności od systemu). Najpierw upewnij się, że to odniesienie jest włączone w twoim projekcie, przechodząc do Narzędzia > Odniesienia w edytorze VBA i zaznaczając Microsoft XML, w wersji 6.0.

Oto jak wysłać proste zapytanie HTTP GET:

Dim httpRequest As Object
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")

With httpRequest
    .Open "GET", "https://api.example.com/data", False
    .send
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Błąd: " & .Status & " - " & .statusText
    End If
End With

Dla zapytania POST, gdzie potrzebujemy wysłać dane (np. JSON) do serwera:

Dim httpRequest As Object, postData As String
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")
postData = "{""klucz"":""wartość""}"

With httpRequest
    .Open "POST", "https://api.example.com/submit", False
    .setRequestHeader "Content-Type", "application/json"
    .send postData
    If .Status = 200 Then
        Debug.Print .responseText
    Else
        Debug.Print "Błąd: " & .Status & " - " & .statusText
    End If
End With

Przykładowy wynik dla udanego żądania może być ciągiem JSON lub stroną HTML, w zależności od interakcji z API lub stroną internetową:

{"data": "To jest odpowiedź z serwera"}

Szczegółowa analiza

Metoda przedstawiona wykorzystuje obiekt MSXML2.XMLHTTP, będący częścią Microsoft XML Core Services (MSXML). Został wprowadzony, aby zaoferować programistom VBA sposób na wykonywanie operacji opartych na XML i z czasem stał się powszechnym narzędziem do zapytań HTTP, nawet gdy nie pracuje się bezpośrednio z danymi XML. Pomimo swojego wieku, pozostaje niezawodną opcją do prostych interakcji sieciowych w VBA.

Jednakże VBA i jego mechanizmy zapytań HTTP brakuje wytrzymałości i elastyczności, które znajdują się w nowoczesnych środowiskach programistycznych. Na przykład, obsługa zapytań asynchronicznych lub praca w aplikacjach wymagających zaawansowanych funkcji HTTP (takich jak websockets czy zdarzenia wysyłane przez serwer) leży poza zakresem możliwości VBA. Pracując nad bardziej skomplikowanymi projektami integracji sieciowej, programiści często wykorzystują zewnętrzne biblioteki lub narzędzia, lub nawet automatyzują zachowanie przeglądarki za pomocą technik web scraping, chociaż są to rozwiązania doraźne, a nie ostateczne.

Języki i środowiska takie jak Python ze swoją biblioteką requests lub JavaScript działający na Node.js oferują bardziej potężne i wszechstronne możliwości zapytań HTTP wprost z pudełka, w tym operacje asynchroniczne, łatwiejsze obsługiwanie JSON-a oraz szerokie wsparcie dla różnorodnych technologii sieciowych. Programiści związani z ekosystemem Microsoftu mogą rozważyć przejście na PowerShell lub C# do zadań wymagających bardziej zaawansowanej interakcji sieciowej, wykorzystując obszerne funkcje programowania sieciowego .NET.

Tak więc, chociaż możliwości wysyłania zapytań HTTP w VBA są adekwatne do prostych zapytań i zadań pobierania danych, eksploracja alternatyw staje się kluczowa, gdy wymagania twojego projektu ewoluują w kierunku złożonego i nowoczesnego krajobrazu sieciowego.