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 .