Course – LS (cat=HTTP Client-Side)

Get started with Spring and Spring Boot, 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

It’s important to note that before we can get our custom cookie from the client 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.

2023-09-13 20:56:59,628 [DEBUG] org.apache.hc.client5.http.headers - http-outgoing-0 >> Cookie: custom_cookie=test_value

Here in log messages, we can see that the custom_cookie is sent in the request.

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 and we can see our custom cookie is present in the request:

[INFO] com.baeldung.httpclient.cookies.HttpClientGettingCookieValueUnitTest - cookie name:_gh_sess 
[INFO] com.baeldung.httpclient.cookies.HttpClientGettingCookieValueUnitTest - cookie name:_octo 
[INFO] com.baeldung.httpclient.cookies.HttpClientGettingCookieValueUnitTest - 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 and Spring Boot, 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!