Autenticação básica de proxy no OkHttp: pare as novas tentativas rejeitadas
Use o proxyAuthenticator do OkHttp para desafios de proxy e pare de repetir uma tentativa de autorização inalterada.
Para um proxy HTTP que oferece autenticação básica, o proxyAuthenticator do OkHttp pode devolver uma solicitação com credenciais. Devolva null depois que uma tentativa de autorização já tiver sido rejeitada, em vez de enviar a mesma resposta novamente:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Este esboço usa valores de conta da configuração secreta da aplicação. A proteção permite uma tentativa inicial e interrompe uma repetida. Ele implementa Basic, não todos os esquemas que um proxy possa anunciar; inspecione o desafio antes de escolher essa resposta.
Se o resultado final continuar 407, compare o proxy selecionado, o esquema anunciado e a identidade de conta documentada. Uma palavra-passe rejeitada, um método não suportado e uma forma de nome de utilizador incorreta exigem correções diferentes. Guarde essas observações e o estado final em diagnósticos expurgados.
O CONNECT tem outro contexto de retorno de chamada: o OkHttp documenta um desafio sintético de autenticação de proxy preventiva antes de abrir o túnel. Trate esse contexto conforme a API em vez de assumir que cada retorno é uma resposta de destino comum.
O authenticator separado serve para a autenticação no servidor de destino. Mantenha as suas credenciais separadas do início de sessão do proxy; um interceptor genérico que coloca uma palavra-passe de proxy em cada pedido de saída pode enviá-la no âmbito errado.
Relatórios históricos também descrevem erros de implementação, incluindo o tratamento do corpo de uma resposta de proxy rejeitada. Registe a versão do OkHttp e a troca final antes de atribuir uma falha atual a um relatório antigo. A decisão de nova tentativa deve continuar a interromper uma tentativa de credenciais inalterada que não tem qualquer resposta nova útil.