Autenticación básica de proxy con OkHttp: deter os reintentos rexeitados
Use proxyAuthenticator de OkHttp para os desafíos do proxy e deixe de repetir un intento de autorización sen cambios.
Para un proxy HTTP que ofrece autenticación básica, proxyAuthenticator de OkHttp pode devolver unha solicitude con credenciais. Devolve null despois de que un intento de autorización xa fose rexeitado, en lugar de enviar de novo a mesma resposta:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Este esquema usa valores de conta da configuración secreta da aplicación. A garda permite un intento inicial e detén un repetido. Implementa Basic, non todos os esquemas que un proxy poida anunciar; examine o desafío antes de escoller esa resposta.
Se o resultado final segue sendo 407, compare o proxy seleccionado, o esquema anunciado e a identidade de conta documentada. Un contrasinal rexeitado, un método non admitido e unha forma incorrecta de nome de usuario necesitan correccións distintas. Conserve esas observacións e o estado final en diagnósticos redactados.
CONNECT ten outro contexto de devolución de chamada: OkHttp documenta un desafío sintético de autenticación previa do proxy antes de abrir o túnel. Trate ese contexto segundo a API en lugar de supor que cada devolución representa unha resposta de destino ordinaria.
O authenticator separado é para a autenticación do servidor de destino. Manteña as súas credenciais separadas do inicio de sesión do proxy; un interceptor xenérico que coloca un contrasinal de proxy en cada solicitude saínte pode envialo no ámbito incorrecto.
Os informes históricos tamén describen erros de implementación, incluído o tratamento do corpo dunha resposta de proxy rexeitada. Rexistre a versión de OkHttp e o intercambio final antes de atribuír un fallo actual a un informe antigo. A decisión de reintento debería seguir detendo un intento de credenciais sen cambios que non ten unha resposta nova útil.