Исправление предупреждения HttpClient "Недопустимый атрибут истечения" с использованием свободного API

Я использую свободный API HttpClient для запроса GET:

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

Но для каждого запроса я получаю следующее предупреждение:

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

Как я могу исправить это и продолжать использовать свободный интерфейс? В идеале я бы хотел найти правильный способ его исправить, но так как я не очень-то забочусь о том, что файлы cookie в моем случае используют любое решение, которое позволяет мне прекратить отображение предупреждений (помимо перенаправления stderr, потому что мне это нужно) приветствуется,

Ответы

Ответ 1

По умолчанию HttpClient испытывает трудности с пониманием последних RFC-совместимых заголовков.

Вместо того, чтобы скрывать предупреждение, просто переключитесь на стандартную спецификацию cookie, подобную этой (HttpClient 4. 4+):

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

Ответ 2

Если вы хотите использовать HttpClientBuilder вы можете использовать следующий ситакс:

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

Ответ 3

Для разработчиков, которые не хотят думать об объектной модели, можно использовать обертку HttpClient для RestTemplate, как показано ниже (как упомянуто выше @comiventor, особенно для разработчиков Spring Boot).

настройщик для 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)
        );
    }
}

и использование его с помощью RestTemplate Builder

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

Ответ 4

Решено:

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