Visual Basic for Applications:
Inviare una richiesta HTTP

Come fare:

La chiave per inviare una richiesta HTTP in VBA è utilizzare la libreria Microsoft XML, v6.0 (o versioni precedenti, a seconda del vostro sistema). Prima di tutto, assicuratevi che questo riferimento sia abilitato nel vostro progetto andando in Strumenti > Riferimenti nell’editor VBA e selezionando Microsoft XML, v6.0.

Ecco come inviare una semplice richiesta 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 "Errore: " & .Status & " - " & .statusText
    End If
End With

Per una richiesta POST, dove dobbiamo inviare dati (ad esempio, JSON) a un server:

Dim httpRequest As Object, postData As String
Set httpRequest = CreateObject("MSXML2.XMLHTTP.6.0")
postData = "{""key"":""value""}"

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 "Errore: " & .Status & " - " & .statusText
    End If
End With

Un esempio di output per una richiesta riuscita potrebbe essere una stringa JSON o una pagina HTML, a seconda dell’API o della pagina web con cui si sta interagendo:

{"data": "Questa è la risposta dal server"}

Approfondimento

Il metodo presentato utilizza l’oggetto MSXML2.XMLHTTP, parte dei Servizi Core Microsoft XML (MSXML). È stato introdotto per offrire ai sviluppatori VBA un modo per eseguire operazioni basate su XML e, col tempo, è diventato un comune strumento per le richieste HTTP, anche quando non si lavora direttamente con dati XML. Nonostante la sua età, rimane un’opzione affidabile per semplici interazioni web in VBA.

Tuttavia, VBA e i suoi meccanismi di richiesta HTTP mancano della robustezza e flessibilità riscontrabili nei moderni ambienti di programmazione. Per esempio, gestire richieste asincrone o lavorare all’interno di applicazioni che richiedono funzionalità HTTP avanzate (come websocket o eventi inviati dal server) è al di fuori delle possibilità di VBA. Quando si lavora su progetti di integrazione web più complessi, i sviluppatori spesso si affidano a librerie o strumenti esterni, o addirittura automatizzano il comportamento del browser tramite tecniche di web scraping, sebbene queste siano delle soluzioni alternative piuttosto che vere e proprie soluzioni.

Linguaggi e ambienti come Python con la sua libreria requests o JavaScript eseguito su Node.js offrono capacità di richiesta HTTP più potenti e versatili direttamente fuori dalla scatola, inclusi operazioni asincrone, gestione più facile di JSON e un esteso supporto per diverse tecnologie web. Gli sviluppatori immersi nell’ecosistema Microsoft potrebbero considerare la transizione a PowerShell o C# per compiti che richiedono interazioni web più sofisticate, sfruttando le ampie caratteristiche di programmazione di rete di .NET.

Quindi, mentre le capacità di richiesta HTTP di VBA sono adeguate per semplici interrogazioni e attività di recupero dati, esplorare alternative diventa cruciale man mano che le esigenze del vostro progetto evolvono verso il complesso e moderno paesaggio web.