Bei einem HTTP-Proxy mit Basic-Authentifizierung kann OkHttps proxyAuthenticator eine Anfrage mit Anmeldedaten zurückgeben. Geben Sie null zurück, nachdem ein Autorisierungsversuch bereits abgelehnt wurde, statt dieselbe Antwort erneut zu senden:

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

Diese Skizze verwendet Kontowerte aus der geheimen Konfiguration der Anwendung. Die Prüfung erlaubt einen ersten Versuch und stoppt einen wiederholten. Sie implementiert Basic, nicht jedes Schema, das ein Proxy anbieten kann; prüfen Sie die Challenge, bevor Sie diese Antwort wählen.

Bleibt das Endergebnis 407, vergleichen Sie den gewählten Proxy, das angekündigte Schema und die dokumentierte Kontoidentität. Ein abgelehntes Passwort, eine nicht unterstützte Methode und eine falsche Benutzernamenform erfordern unterschiedliche Korrekturen. Halten Sie diese Beobachtungen und den endgültigen Status in redigierten Diagnosedaten fest.

CONNECT hat einen anderen Callback-Kontext: OkHttp dokumentiert eine synthetische präemptive Proxy-Authentifizierungs-Challenge, bevor der Tunnel geöffnet wird. Behandeln Sie diesen Kontext gemäß der API, statt anzunehmen, jeder Callback sei eine gewöhnliche Zielantwort.

Der separate authenticator ist für die Authentifizierung am Zielserver zuständig. Halten Sie seine Anmeldedaten vom Proxy-Login getrennt; ein generischer Interceptor, der ein Proxy-Passwort in jede ausgehende Anfrage setzt, kann es im falschen Bereich senden.

Historische Berichte beschreiben auch Implementierungsfehler, einschließlich der Behandlung abgelehnter Proxy-Antwortkörper. Notieren Sie die OkHttp-Version und den letzten Austausch, bevor Sie einen aktuellen Fehler einem alten Bericht zuordnen. Die Wiederholungsentscheidung sollte weiterhin einen unveränderten Anmeldedatenversuch stoppen, der keine nützliche neue Antwort hat.

Ähnliche Artikel