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.