Generic Top

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

>> CHECK OUT THE COURSE

1. Overview

In this short tutorial, we'll see how to get cookies from the Apache HttpClient response. 

First, we'll show how to send a custom cookie with an HttpClient request. Then, we'll see how to get it from the response.

Please note that the code examples presented here are based on HttpClient 4.3.x and above, so they won't work on older versions of the API.

2. Sending Cookies in the Request

Before we can get our cookie from the response, we'll need to create it and send it in a request:

BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("custom_cookie", "test_value");
cookie.setDomain("baeldung.com");
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
    }
}

First, we create a basic cookie store and a basic cookie with the name custom_cookie and value test_value. Then, we create an HttpClientContext instance that will hold the cookie store. Finally, we pass the created context as an argument to the execute() method.

3. Accessing Cookies

Now that we've sent a custom cookie in a request, let's see how to read it from the response:

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());
    }
}

To get our custom cookie from the response, we must first get the cookie store from the context. Then, we use the getCookies method to get the cookies list. We can then make use of Java streams to iterate over it and search for our cookie. Additionally, we log all cookie names from the store:

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

4. Conclusion

In this article, we learned how to get cookies from the Apache HttpClient response.

As always, the code is available over on GitHub.

Generic bottom

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

>> CHECK OUT THE COURSE
guest
0 Comments
Inline Feedbacks
View all comments