OkHttp Basic-proxyautentisering: stoppa avvisade nya försök
Använd OkHttps proxyAuthenticator för proxy-utmaningar och sluta upprepa ett oförändrat auktoriseringsförsök.
För en HTTP-proxy som erbjuder Basic-autentisering kan OkHttps proxyAuthenticator returnera en begäran med autentiseringsuppgifter. Returnera null efter att ett auktoriseringsförsök redan har avvisats, i stället för att skicka samma svar igen:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Den här skissen använder kontovärden från applikationens hemliga konfiguration. Skyddet tillåter ett första försök och stoppar ett upprepat. Det implementerar Basic, inte varje schema som en proxy kan annonsera; granska utmaningen innan du väljer det svaret.
Om slutresultatet fortfarande är 407, jämför den valda proxyn, det annonserade schemat och den dokumenterade kontoidentiteten. Ett avvisat lösenord, en metod som inte stöds och en felaktig användarnamnsform kräver olika rättelser. Behåll dessa observationer och slutstatusen i redigerad diagnostik.
CONNECT har en annan återanropskontext: OkHttp dokumenterar en syntetisk förebyggande proxyautentiseringsutmaning innan tunneln öppnas. Hantera den kontexten enligt API:t i stället för att anta att varje återanrop är ett vanligt målsvar.
Den separata authenticator är för autentisering mot målservern. Håll dess uppgifter åtskilda från proxyinloggningen; en generisk interceptor som sätter ett proxylösenord på varje utgående begäran kan skicka det i fel omfattning.
Historiska rapporter beskriver också implementeringsfel, inklusive hantering av avvisade proxy-svarskroppar. Registrera OkHttp-versionen och det sista utbytet innan du tillskriver ett nuvarande fel en gammal rapport. Upprepningsbeslutet bör fortfarande stoppa ett oförändrat autentiseringsförsök som inte har något användbart nytt svar.