Authentification proxy Basic avec OkHttp : arrêtez les nouvelles tentatives rejetées
Utilisez proxyAuthenticator d'OkHttp pour les défis de proxy et cessez de répéter une tentative d'autorisation inchangée.
Pour un proxy HTTP proposant l'authentification Basic, proxyAuthenticator d'OkHttp peut renvoyer une requête portant des identifiants. Renvoyez null après qu'une tentative d'autorisation a déjà été rejetée, plutôt que d'envoyer à nouveau la même réponse :
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Cet exemple utilise des valeurs de compte issues de la configuration secrète de l'application. Le garde-fou autorise une première tentative et arrête une tentative répétée. Il implémente Basic, pas tous les schémas qu'un proxy peut annoncer ; examinez le défi avant de choisir cette réponse.
Si le résultat final reste 407, comparez le proxy sélectionné, le schéma annoncé et l'identité de compte documentée. Un mot de passe rejeté, une méthode non prise en charge et une forme de nom d'utilisateur incorrecte exigent des corrections différentes. Conservez ces observations et le statut final dans des diagnostics expurgés.
CONNECT a un autre contexte de rappel : OkHttp documente un défi synthétique d'authentification proxy préemptive avant d'ouvrir le tunnel. Traitez ce contexte conformément à l'API au lieu de supposer que chaque rappel représente une réponse de destination ordinaire.
L'authenticator distinct sert à l'authentification du serveur de destination. Gardez ses identifiants séparés de la connexion au proxy ; un intercepteur générique qui place un mot de passe de proxy sur chaque requête sortante peut l'envoyer à la mauvaise portée.
Des rapports historiques décrivent aussi des bogues d'implémentation, notamment la gestion du corps d'une réponse proxy rejetée. Notez la version d'OkHttp et l'échange final avant d'attribuer une défaillance actuelle à un ancien rapport. La décision de nouvelle tentative devrait toujours arrêter une tentative d'identifiants inchangée qui n'a aucune nouvelle réponse utile.