Inviare una richiesta HTTP con autenticazione di base

Visual Basic for Applications:
Inviare una richiesta HTTP con autenticazione di base

Come fare:

In VBA, puoi usare la libreria Microsoft XML, v6.0 (MSXML2) per inviare richieste HTTP con autenticazione di base. Questo comporta l’impostazione dell’intestazione "Authorization" della richiesta per includere le credenziali in un formato codificato in base64. Ecco una guida passo passo:

  1. Referenziare MSXML2: Prima di tutto, assicurati che il tuo progetto VBA faccia riferimento alla libreria Microsoft XML, v6.0. Nell’editor VBA, vai su Strumenti > Riferimenti e spunta Microsoft XML, v6.0.

  2. Creare e inviare la richiesta HTTP: Usa il seguente frammento di codice VBA come guida. Sostituisci "your_username" e "your_password" con le tue credenziali effettive e regola l’URL come necessario.

    Dim XMLHttp As Object
    Set XMLHttp = CreateObject("MSXML2.XMLHTTP")
    Dim url As String
    url = "http://example.com/api/resource" ' Sostituire con l'URL effettivo
    Dim base64Credentials As String
    base64Credentials = EncodeBase64("your_username:your_password")
    
    XMLHttp.Open "GET", url, False
    XMLHttp.setRequestHeader "Authorization", "Basic " & base64Credentials
    XMLHttp.send
    
    Debug.Print XMLHttp.responseText ' Stampa la risposta nella Finestra Immediata
  3. Codificare le credenziali in base64: VBA non ha una funzione incorporata per la codifica base64, ma puoi usare questa funzione personalizzata EncodeBase64:

    Function EncodeBase64(text As String) As String
        Dim arrData() As Byte
        arrData = StrConv(text, vbFromUnicode)
    
        Dim objXML As MSXML2.DOMDocument60
        Dim objNode As MSXML2.IXMLDOMElement
    
        Set objXML = New MSXML2.DOMDocument60
        Set objNode = objXML.createElement("b64")
    
        objNode.dataType = "bin.base64"
        objNode.nodeTypedValue = arrData
        EncodeBase64 = objNode.Text
    End Function

Questo invierà una richiesta GET a http://example.com/api/resource con le specificate credenziali di autenticazione di base e stampa la risposta.

Approfondimento

L’approccio usato qui, sebbene efficace per casi d’uso semplici, si basa sullo schema di Autenticazione di Base, che invia le credenziali in un formato facilmente decodificabile (la codifica base64 non è criptazione). A causa della sua vulnerabilità, specialmente in contesti non HTTPS, l’Autenticazione di Base non è raccomandata per trasmettere dati sensibili su internet senza ulteriori strati di sicurezza come SSL/TLS.

Storicamente, l’Autenticazione di Base è stato uno dei primi metodi sviluppati per controllare l’accesso alle risorse web. Oggi, standard di autenticazione più sicuri e flessibili, come OAuth 2.0, sono generalmente preferiti per nuove applicazioni. Data le limitazioni di VBA e le dipendenze esterne richieste per metodi di autenticazione più avanzati, gli sviluppatori spesso impiegano VBA in ambienti interni o meno critici dal punto di vista della sicurezza, o lo utilizzano come un trampolino di lancio per prototipare rapidamente idee.

Quando si utilizza VBA per richieste HTTP, ricorda che ogni versione della libreria MSXML può supportare diverse funzionalità e standard di sicurezza. Utilizza sempre la versione più recente compatibile con la tua applicazione per assicurare una migliore sicurezza e prestazioni. Inoltre, considera i limiti ambientali e le potenziali caratteristiche deprecate quando scegli VBA per nuovi progetti, specialmente quelli che richiedono comunicazioni HTTP sicure. Altri ambienti di programmazione o linguaggi potrebbero offrire soluzioni più robuste, sicure e mantenibili per compiti simili.