Um upload repetido após um desafio do proxy volta a precisar do seu corpo. Para o conector Apache do Jersey 2, selecione o processamento de entidade armazenada em buffer na configuração usada para construir esse cliente:

ClientConfig config = new ClientConfig();
config.connectorProvider(new ApacheConnectorProvider());
config.property(ClientProperties.PROXY_URI,
                "http://proxy.example.net:8080");
config.property(ClientProperties.REQUEST_ENTITY_PROCESSING,
                RequestEntityProcessing.BUFFERED);

Realize o upload pelo cliente resultante. Esses tipos vêm dos pacotes Jersey client e Apache-connector; definir uma configuração não utilizada não afetaria o pedido.

O conector envolve uma entidade armazenada em buffer no BufferedHttpEntity do Apache. A sua entidade de streaming sem buffer não é repetível. O armazenamento em buffer fornece ao fluxo de autenticação bytes que ele pode reenviar em vez de reler um produtor já consumido.

Isso não garante que a autenticação termine após um único 407. Alguns esquemas exigem legitimamente várias trocas, portanto examine toda a negociação antes de tratar outro desafio como estado perdido.

Mantenha o tamanho do corpo dentro do orçamento de memória. Um upload de streaming grande precisa de uma estratégia de repetição adequada a essa carga; ativar o buffer para cada pedido pode trocar uma falha de negociação por esgotamento de memória.

Artigos relacionados