1. 概要
この短いチュートリアルでは、ApacheHttpClient応答からCookieを取得する方法を説明します。
最初に、HttpClientリクエストを使用してカスタムCookieを送信する方法を示します。 次に、応答から取得する方法を説明します。
ここに示されているコード例は、 HttpClient 4.3.x以降に基づいているため、古いバージョンのAPIでは機能しないことに注意してください。
2. リクエストでCookieを送信する
応答からCookieを取得する前に、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
}
}
まず、基本的なCookieストアと基本的な cookie を、名前custom_cookieと値test_valueで作成します。 次に、Cookieストアを保持するHttpClientContextインスタンスを作成します。 最後に、作成したコンテキストを引数として execute()メソッドに渡します。
3. クッキーへのアクセス
リクエストでカスタム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を取得するには、最初にコンテキストからCookieストアを取得する必要があります。 次に、getCookiesメソッドを使用してCookieリストを取得します。 次に、Java ストリームを使用して、Java ストリームを反復処理し、Cookieを検索できます。 さらに、ストアからすべてのCookie名をログに記録します。
[main] INFO c.b.h.c.HttpClientGettingCookieValueTest - cookie name:__cfduid
[main] INFO c.b.h.c.HttpClientGettingCookieValueTest - cookie name:custom_cookie
4. 結論
この記事では、ApacheHttpClient応答からCookieを取得する方法を学びました。
いつものように、コードはGitHubでから入手できます。