Course – LS (cat=HTTP Client-Side)

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> 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 5.2.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.setAttribute("domain", "true");
cookie.setPath("/");
cookieStore.addCookie(cookie);

HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_STORE, createCustomCookieStore());

try (CloseableHttpClient client = HttpClientBuilder.create()
    .build()) {
    client.execute(request, context, new BasicHttpClientResponseHandler());
}

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:

try (CloseableHttpClient client = HttpClientBuilder.create()
    .build()) {
    client.execute(request, context, new BasicHttpClientResponseHandler());
    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.

Course – LS (cat=HTTP Client-Side)

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – HTTP Client (eBook) (cat=Http Client-Side)
2 Comments
Oldest
Newest
Inline Feedbacks
View all comments
Comments are closed on this article!