HttpClient-waarschuwing “Ongeldig verloopt-kenmerk” oplossen met behulp van vloeiende API

Ik gebruik de vloeiende API van HttpClient om een ​​GET-verzoek in te dienen:

String jsonResult = Request.Get(requestUrl)
            .connectTimeout(2000)
            .socketTimeout(2000)
            .execute().returnContent().asString();

Maar voor elk verzoek krijg ik de volgende waarschuwing:

apr 07, 2016 12:26:46 PM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Invalid cookie header: "Set-Cookie: WMF-Last-Access=07-Apr-2016;Path=/;HttpOnly;Expires=Mon, 09 May 2016 00:00:00 GMT". Invalid 'expires' attribute: Mon, 09 May 2016 00:00:00 GMT

Hoe kan ik dit oplossen en de vloeiende interface blijven gebruiken? In het ideale geval zou ik een goede manier willen om het op te lossen, maar aangezien ik niet echt om de cookies in mijn gebruiksgeval geef, is elke oplossing waarmee ik kan stoppen met het weergeven van de waarschuwingen (naast het omleiden van stderr, want dat heb ik nodig) welkom .


Antwoord 1, autoriteit 100%

De standaard HttpClient heeft moeite met het begrijpen van de nieuwste RFC-compatibele headers.

In plaats van de waarschuwing te verbergen, schakel je gewoon over naar een standaard cookiespecificatie zoals deze (HttpClient 4.4+):

HttpClient httpClient = HttpClients.custom()
        .setDefaultRequestConfig(RequestConfig.custom()
                .setCookieSpec(CookieSpecs.STANDARD).build())
        .build();

Antwoord 2, autoriteit 16%

Als u HttpClientBuilderwilt gebruiken, kunt u de volgende sytax gebruiken:

       HttpClient httpClient = HttpClientBuilder.create()
            .setDefaultRequestConfig(RequestConfig.custom()
                    .setCookieSpec(CookieSpecs.STANDARD).build()).build();

Antwoord 3, autoriteit 9%

Voor de ontwikkelaars die niet willen nadenken over het objectmodel, kan het inpakken van de HttpClient voor een RestTemplate worden gebruikt zoals hieronder (zoals @comiventor hierboven vermeld, speciaal voor Spring Boot-ontwikkelaars).

een Customizer voor RestTemplate,

public class RestTemplateStandardCookieCustomizer 
                         implements RestTemplateCustomizer {
    @Override
    public void customize(final RestTemplate restTemplate) {
        final HttpClient httpClient = HttpClients.custom()
            .setDefaultRequestConfig(RequestConfig.custom()
                .setCookieSpec(CookieSpecs.STANDARD).build())
            .build();
        restTemplate.setRequestFactory(
          new HttpComponentsClientHttpRequestFactory(httpClient)
        );
    }
}

en gebruiken met de RestTemplate Builder

var restTemplate = restTemplateBuilder.additionalCustomizers(
            new RestTemplateStandardCookieCustomizer()
        ).build();

Antwoord 4, autoriteit 2%

Opgelost met:

System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.client.protocol.ResponseProcessCookies", "fatal");

Other episodes