Inviare una richiesta http con autenticazione di base

Rust:
Inviare una richiesta http con autenticazione di base

How to:

Installiamo reqwest, una crate Rust per effettuare chiamate HTTP.

[dependencies]
reqwest = "0.11"
tokio = { version = "1", features = ["full"] }

Usiamo reqwest con autenticazione di base in un ambiente asincrono:

use reqwest::header::{HeaderMap, AUTHORIZATION, CONTENT_TYPE};
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let client = reqwest::Client::new();
    let username = "user";
    let password = "pass";
    let auth_value = format!("Basic {}", base64::encode(format!("{}:{}", username, password)));

    let mut headers = HeaderMap::new();
    headers.insert(AUTHORIZATION, auth_value.parse().unwrap());
    headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());

    let response = client
        .get("http://example.com/resource")
        .headers(headers)
        .send()
        .await?;

    println!("Risposta: {}", response.text().await?);
    Ok(())
}

Risultato campione:

Risposta: {"status": "success", "data": ...}

Deep Dive

L’autenticazione di base HTTP, definita nel RFC 7617, codifica username:password con Base64. Alternativa più sicura: autenticazione Bearer con token. Implementarla con reqwest è semplice, ma attenzione, Base64 non è crittografia, quindi HTTPS è essenziale per proteggere le credenziali. reqwest gestisce internamente dettagli come la gestione della connessione e il riutilizzo.

See Also