Osnovna proxy autentifikacija u OkHttp-u: zaustavite odbijene ponovne pokušaje
Koristite OkHttp proxyAuthenticator za proxy izazove i zaustavite ponavljanje nepromijenjenog pokušaja autorizacije.
Za HTTP proxy koji nudi osnovnu autentifikaciju, OkHttp proxyAuthenticator može vratiti zahtjev s akreditivima. Vratite null nakon što je pokušaj autorizacije već odbijen, umjesto da ponovno pošaljete isti odgovor:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Ova skica koristi vrijednosti računa iz tajne konfiguracije aplikacije. Zaštita dopušta početni pokušaj i zaustavlja ponovljeni. Implementira Basic, ne svaku shemu koju proxy može najaviti; pregledajte izazov prije nego što odaberete taj odgovor.
Ako konačni rezultat ostane 407, usporedite odabrani proxy, najavljenu shemu i dokumentirani identitet računa. Odbijena lozinka, nepodržana metoda i pogrešan oblik korisničkog imena zahtijevaju različite ispravke. Sačuvajte ta zapažanja i konačni status u redigiranoj dijagnostici.
CONNECT ima drugačiji kontekst povratnog poziva: OkHttp dokumentira sintetički preventivni izazov proxy autentifikacije prije otvaranja tunela. Obradite taj kontekst u skladu s API-jem umjesto da pretpostavite da je svaki poziv običan odgovor odredišta.
Odvojeni authenticator služi za autentifikaciju na odredišnom poslužitelju. Držite njegove akreditive odvojeno od proxy prijave; generički interceptor koji stavlja proxy lozinku u svaki odlazni zahtjev može je poslati u pogrešan opseg.
Povijesna izvješća također opisuju pogreške u implementaciji, uključujući rukovanje tijelom odbijenog proxy odgovora. Zabilježite verziju OkHttp-a i konačnu razmjenu prije nego trenutačni neuspjeh pripišete starom izvješću. Odluka o ponavljanju i dalje treba zaustaviti nepromijenjen pokušaj akreditiva koji nema koristan novi odgovor.