Autentikasi proxy Basic OkHttp: hentikan percobaan ulang yang ditolak
Gunakan proxyAuthenticator OkHttp untuk tantangan proxy dan berhenti mengulang upaya otorisasi yang tidak berubah.
Untuk proxy HTTP yang menawarkan autentikasi Basic, proxyAuthenticator OkHttp dapat mengembalikan permintaan yang membawa kredensial. Kembalikan null setelah upaya otorisasi sudah ditolak, alih-alih mengirim jawaban yang sama lagi:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Sketsa ini memakai nilai akun dari konfigurasi rahasia aplikasi. Penjaga memungkinkan upaya awal dan menghentikan upaya berulang. Ini menerapkan Basic, bukan setiap skema yang mungkin diiklankan proxy; periksa tantangan sebelum memilih jawaban itu.
Jika hasil akhirnya tetap 407, bandingkan proxy yang dipilih, skema yang diiklankan, dan identitas akun yang didokumentasikan. Kata sandi yang ditolak, metode yang tidak didukung, dan bentuk nama pengguna yang salah memerlukan koreksi berbeda. Simpan pengamatan itu dan status akhir dalam diagnostik yang disunting.
CONNECT punya konteks callback lain: OkHttp mendokumentasikan tantangan autentikasi proxy preemptif sintetis sebelum membuka terowongan. Tangani konteks itu sesuai API, bukan menganggap setiap callback adalah respons tujuan biasa.
authenticator yang terpisah adalah untuk autentikasi server tujuan. Jaga kredensialnya terpisah dari login proxy; interceptor generik yang menaruh kata sandi proxy pada setiap permintaan keluar dapat mengirimnya pada cakupan yang salah.
Laporan historis juga menggambarkan bug implementasi, termasuk penanganan isi respons proxy yang ditolak. Catat versi OkHttp dan pertukaran terakhir sebelum mengaitkan kegagalan saat ini dengan laporan lama. Keputusan percobaan ulang tetap harus menghentikan upaya kredensial yang tidak berubah yang tidak punya jawaban baru yang berguna.