1. Обзор
В этом коротком учебнике мы увидим, как получить файлы cookie от ответа Apache HttpClient.
Во-первых, мы покажем, как отправить пользовательское печенье с HttpClient просьба. Затем мы увидим, как получить его от ответа.
Обратите внимание, что представленные здесь примеры кода основаны на HttpClient 4.3.x и выше, поэтому они не будут работать над более старыми версиями API.
2. Отправка файлов 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
}
}Во-первых, мы создаем базовый магазин печенья и базовый печенье с именем custom_cookie и значение test_value . Затем мы создаем HttpClientContext экземпляр, который будет держать магазин файлов cookie. Наконец, мы перемеем созданный контекст в качестве аргумента в выполнить () метод.
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 из контекста . Затем мы используем getCookies метод, чтобы получить список файлов cookie. Затем мы можем использовать Java- потоки чтобы итерировать над ним и искать наше печенье. Кроме того, мы вараним все имена файлов 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 .