Quando o WinHTTP alterna entre 407 e 401
Preserve o estado de autenticação do proxy escolhido e reaplique-o antes de novas tentativas, tratando o desafio do destino em separado.
Um pedido WinHTTP autentica-se no proxy, recebe o 401 de um site e depois obtém outro 407 no envio seguinte. O proxy e o site têm estados de autenticação separados, e o caminho de reenvio precisa de manter ambos.
O exemplo nativo de autenticação WinHTTP da Microsoft guarda o esquema de proxy escolhido numa variável e reaplica a conta de proxy antes de cada WinHttpSendRequest depois de esse esquema ser selecionado.
- Envie o pedido e inspecione a resposta.
- Perante um 407, consulte os esquemas oferecidos e memorize o esquema de proxy escolhido.
- Antes de reenviar, chame WinHttpSetCredentials para WINHTTP_AUTH_TARGET_PROXY com esse esquema e conta.
- Perante um 401 do destino, obtenha o respetivo esquema e defina as credenciais do servidor, mantendo o estado de proxy memorizado para o envio seguinte.
O exemplo refere especificamente a reautenticação após um desafio do servidor ou um redirecionamento como motivo para reaplicar as credenciais do proxy. Colocar a chamada apenas no primeiro ramo 407 pode deixar outro caminho de nova tentativa sem a configuração esperada.
Verifique cada resultado da API e mantenha as falhas repetidas limitadas. O exemplo compacto da Microsoft acompanha o estado anterior, enquanto uma política de novas tentativas em produção também deve reconhecer uma sequência alternada repetida.
Se o utilizador fornecer uma conta de substituição após uma falha, atualize os valores usados por esse caminho de reenvio. WinHttpSetCredentials tem âmbito de pedido; não é um armazém de palavras-passe de todo o processo cujo conteúdo seja substituído para todos os pedidos futuros.