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から入手できます。