Перейти к основному содержимому

Как получить файлы cookie из ответа Apache HttpClient

· 2 мин. чтения

1. Обзор

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

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

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

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

BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("custom_cookie", "test_value");
cookie.setDomain("foreach.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.foreach.com/"), context)) {
//do something with the response
}
}

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

Теперь, когда мы отправили пользовательский файл 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 .