HttpClient 4.1.2を使用しています
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpClient.execute(httpget);
それでは、どうすればクッキーの値を取得できますか?
注:最初のリンクは、HttpClient V3で使用されていたものを指します。以下のV4関連情報をご覧ください。
これはあなたの質問に答えるはずです
http://www.Java2s.com/Code/Java/Apache-Common/GetCookievalueandsetcookievalue.htm
V4に関連するものは次のとおりです。
...さらに、javadocsにはCookie処理に関する詳細情報が含まれている必要があります
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<Cookie> cookies = cookieStore.getCookies();
// process...
ResponseProcessCookiesおよびAbstractHttpClientのjavadocsを必ずお読みください。
受け入れられた答えが存在しないメソッドgetCookieStore()
を説明している理由がわかりません。それは間違っています。
事前にCookieストアを作成してから、そのCookieストアを使用してクライアントを構築する必要があります。その後、後でこのCookieストアを参照して、Cookieのリストを取得できます。
/* init client */
HttpClient http = null;
CookieStore httpCookieStore = new BasicCookieStore();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCookieStore(httpCookieStore);
http = builder.build();
/* do stuff */
HttpGet httpRequest = new HttpGet("http://stackoverflow.com/");
HttpResponse httpResponse = null;
try {httpResponse = http.execute(httpRequest);} catch (Throwable error) {throw new RuntimeException(error);}
/* check cookies */
httpCookieStore.getCookies();
他の人を開始するためのさらに別の方法は、存在しないメソッドが頭をかきむしるのを見る...
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());
}
これにより、Cookieの値が出力されます。サーバーの応答には複数のSet-Cookie
ヘッダーフィールド。したがって、Header
sの配列を取得する必要があります。
最初の質問の例に基づいて、HTTP要求の実行後にCookieStore
にアクセスする方法は、HttpContext
実行状態オブジェクトを使用することです。
HttpContext
は、リクエストの実行後にCookieストアを参照します(HttpClientBuilderでCookieStoreが指定されていない場合は新しい)。
HttpClientContext context = new HttpClientContext();
CloseableHttpResponse response = httpClient.execute(request, context);
CookieStore cookieStore = context.getCookieStore();
これはhttpcomponents-client:4.3+
ClosableHttpClient
が導入されたとき。
Matt Broekhuis のコメントで回答された 上記のこの回答 の場合、DefaultHttpClient.getCookieStore()
を使用できます
サーバーに回答した時点では、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<Cookie> 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]]