«1. Обзор

В этом кратком руководстве мы увидим, как получить файлы cookie из ответа Apache HttpClient.

Сначала мы покажем, как отправить пользовательский файл cookie с запросом HttpClient. Затем мы увидим, как получить его из ответа.

Обратите внимание, что представленные здесь примеры кода основаны на HttpClient 4.3.x и более поздних версиях, поэтому они не будут работать в более старых версиях API.

2. Отправка файлов cookie в запросе

Прежде чем мы сможем получить наш файл cookie из ответа, нам нужно создать его и отправить в запросе:

BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("custom_cookie", "test_value");
cookie.setDomain("baeldung.com");
cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");
cookie.setPath("/");
cookieStore.addCookie(cookie);

HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);

try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
    try (CloseableHttpResponse response = httpClient.execute(new HttpGet("http://www.baeldung.com/"), context)) {
        //do something with the response
    }
}

Сначала мы создадим базовый файл cookie. store и основной файл cookie с именем custom_cookie и значением test_value. Затем мы создаем экземпляр HttpClientContext, в котором будет храниться хранилище файлов cookie. Наконец, мы передаем созданный контекст в качестве аргумента методу execute().

3. Доступ к файлам cookie

Теперь, когда мы отправили пользовательский файл cookie в запросе, давайте посмотрим, как прочитать его из ответа:

HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_STORE, createCustomCookieStore());

try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
    try (CloseableHttpResponse response = httpClient.execute(new HttpGet(SAMPLE_URL), context)) {
        CookieStore cookieStore = context.getCookieStore();
        Cookie customCookie = cookieStore.getCookies()
          .stream()
          .peek(cookie -> log.info("cookie name:{}", cookie.getName()))
          .filter(cookie -> "custom_cookie".equals(cookie.getName()))
          .findFirst()
          .orElseThrow(IllegalStateException::new);

          assertEquals("test_value", customCookie.getValue());
    }
}

Чтобы получить наш пользовательский файл cookie из ответа, мы должны сначала получите хранилище файлов cookie из контекста. Затем мы используем метод getCookies для получения списка файлов cookie. Затем мы можем использовать потоки Java для перебора и поиска нашего файла cookie. Кроме того, мы регистрируем все имена файлов cookie из хранилища:

[main] INFO  c.b.h.c.HttpClientGettingCookieValueTest - cookie name:__cfduid
[main] INFO  c.b.h.c.HttpClientGettingCookieValueTest - cookie name:custom_cookie

4. Заключение

В этой статье мы узнали, как получить файлы cookie из ответа Apache HttpClient.

Как всегда, код доступен на GitHub.