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("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() .
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 .