HttpClientからクッキーを取得する方法を教えてください。

HttpClient 4.1.2 を使用しています。

HttpGet httpget = new HttpGet(uri); 
HttpResponse response = httpClient.execute(httpget);

クッキーの値を取得する方法を教えてください。

受理された回答が、なぜ存在しないメソッド getCookieStore() を記述しているのかわかりません。それは間違っています。

事前にクッキー・ストアを作成し、そのクッキー・ストアを使用してクライアントを構築しなければなりません。それから後で、クッキーのリストを得るためにこのクッキー・ストアを参照することができます。

解説 (4)

さらにもうひとつは、存在しないメソッドを見て頭をかきむしりながら、他の人たちをスタートさせることだ......。

import org.apache.http.Header;
import org.apache.http.HttpResponse;

Header[] headers = httpResponse.getHeaders("Set-Cookie");
for (Header h : headers) {
    System.out.println(h.getValue().toString());  
}

これはクッキーの値を表示します。サーバのレスポンスは複数の Set-Cookie ヘッダフィールドを持つことができるので、Header の配列を取得する必要があります。

解説 (0)
ソリューション

注意:最初のリンクは、HttpClient V3で動作していたものを指しています。V4関連の情報は下記をご覧ください。

これがあなたの質問の答えになるはずです。

http://www.java2s.com/Code/Java/Apache-Common/GetCookievalueandsetcookievalue.htm

以下はV4に関連するものです:

...さらに、javadocsはクッキーの扱いに関するより多くの情報を含むべきです。

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html

そして、httpclient v4のチュートリアルです:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html

そして、以下は参考になる擬似コードです:

HttpClient httpClient = new DefaultHttpClient();
// execute get/post/put or whatever
httpClient.doGetPostPutOrWhatever();
// get cookieStore
CookieStore cookieStore = httpClient.getCookieStore();
// get Cookies
List cookies = cookieStore.getCookies();
// process...

ResponseProcessCookiesとAbstractHttpClientのjavadocを必ず読んでください。

解説 (10)

最初の質問の例に基づいて、HTTPリクエストを実行した後に「CookieStore」にアクセスする方法は、「HttpContext」実行状態オブジェクトを使用することです。

HttpContextは、リクエストの実行後にCookieストア(HttpClientBuilderでCookieStoreが指定されていない場合は新規)を参照します。

HttpClientContext context = new HttpClientContext();
CloseableHttpResponse response = httpClient.execute(request, context);
CookieStore cookieStore = context.getCookieStore();

これは、「ClosableHttpClient」が導入されたときの「httpcomponents-client:4.3 +」に適用されます。

解説 (0)

Matt Broekhuis上記の回答のコメントで回答したように、 DefaultHttpClient.ge tCookieStore()を使用できます。

サーバーに回答した時点では、「httpclient-4.2.5」に制限されていたことに注意してください。 DefaultHttpClientは4.3で非推奨になりました。 他の人が同じ状況にいる可能性があり、元のポスターが4.1.2を使用していると指定したため、この回答をここに残します。

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.IOException;
import java.util.List;

public class So8733758 {

  public static void main(String... args) throws IOException {
    final HttpUriRequest request = new HttpGet("http://stackoverflow.com");
    final DefaultHttpClient http = new DefaultHttpClient();
    http.execute(request);
    final List cookies = http.getCookieStore().getCookies();
    System.out.println(cookies);
  }
}

どの出力。

[[version: 0][name: __cfduid][value: de2dfa8314f565701cf7b3895206f04d81457380383][domain: .stackoverflow.com][path: /][expiry: Tue Mar 07 11:53:03 PST 2017], [version: 0][name: prov][value: eeee9738-c50b-44f6-a8aa-b54966db1a88][domain: .stackoverflow.com][path: /][expiry: Thu Dec 31 16:00:00 PST 2054]]
解説 (2)