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 sa akreditancijama. Vratite null nakon što je pokušaj autorizacije već odbijen, umjesto da ponovo 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 šemu koju proxy može najaviti; pregledajte izazov prije nego što odaberete taj odgovor.
Ako konačni rezultat ostane 407, uporedite odabrani proxy, najavljenu šemu i dokumentovani 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 redigovanoj dijagnostici.
CONNECT ima drugačiji kontekst povratnog poziva: OkHttp dokumentuje sintetički preventivni proxy autentifikacijski izazov 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 je za autentifikaciju na odredišnom serveru. Držite njegove akreditacije odvojeno od proxy prijave; generički interceptor koji stavlja proxy lozinku u svaki odlazni zahtjev može je poslati u pogrešan obim.
Historijski izvještaji također opisuju greške u implementaciji, uključujući rukovanje tijelom odbijenog proxy odgovora. Zabilježite verziju OkHttp-a i konačnu razmjenu prije nego trenutni neuspjeh pripišete starom izvještaju. Odluka o ponavljanju i dalje treba zaustaviti nepromijenjen pokušaj akreditacija koji nema koristan novi odgovor.