Per un proxy HTTP che offre autenticazione Basic, proxyAuthenticator di OkHttp può restituire una richiesta con le credenziali. Restituisci null dopo che un tentativo di autorizzazione è già stato rifiutato, invece di inviare di nuovo la stessa risposta:

.proxyAuthenticator { _, response ->
    if (response.request.header("Proxy-Authorization") != null) {
        null
    } else {
        response.request.newBuilder()
            .header("Proxy-Authorization",
                    Credentials.basic(proxyUser, proxyPassword))
            .build()
    }
}

Questo schema usa i valori dell'account dalla configurazione segreta dell'applicazione. La guardia consente un tentativo iniziale e ne ferma uno ripetuto. Implementa Basic, non ogni schema che un proxy può annunciare; esamina la sfida prima di scegliere quella risposta.

Se il risultato finale resta 407, confronta il proxy scelto, lo schema annunciato e l'identità dell'account documentata. Una password rifiutata, un metodo non supportato e una forma di nome utente errata richiedono correzioni diverse. Conserva queste osservazioni e lo stato finale in diagnostica oscurata.

CONNECT ha un altro contesto di callback: OkHttp documenta una sfida sintetica di autenticazione proxy preventiva prima di aprire il tunnel. Gestisci quel contesto secondo l'API invece di presumere che ogni callback sia una normale risposta di destinazione.

Il separato authenticator serve per l'autenticazione al server di destinazione. Tieni le sue credenziali separate dall'accesso al proxy; un interceptor generico che inserisce una password proxy su ogni richiesta in uscita può inviarla nell'ambito sbagliato.

I rapporti storici descrivono anche bug di implementazione, inclusa la gestione del corpo di una risposta proxy rifiutata. Registra la versione di OkHttp e lo scambio finale prima di attribuire un guasto attuale a un vecchio rapporto. La decisione di nuovo tentativo dovrebbe comunque fermare un tentativo di credenziali invariato che non ha alcuna nuova risposta utile.

Articoli correlati