web-dev-qa-db-ja.com

Apache HttpClient 4.0.3-CookieをPOSTリクエストのセッションIDで設定するにはどうすればよいですか?

jsessionidをcookieに保存する方法を教えてください。そうすれば、postrequestでサーブレットに渡すことができますか? Apache HttpClientバージョン4.0.3を使用しています。私が見つけたすべてのソリューションは、HttpClient 3.1でこれを行う方法を説明しています。チュートリアルを読んでこれを試しましたが、機能しません。

_HttpPost httppost = new HttpPost(postData);
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId());
cookieStore.addCookie(cookie);
client.setCookieStore(cookieStore);
response = client.execute(httppost);
_

編集-詳細な説明
友人が作成したサーブレットに接続しています。ログインしてjsessionidを取得しました。ここで、別のリクエストを送信し、認証目的でjsessionidを渡す必要があります。 Java HttpURLConnectionを使用し、Cookieを設定し、それを渡して、動作したため、サーブレットは正常に動作します。要求。

別の編集-解決策が1つありますリクエストヘッダーのパラメーターを設定し、機能しました。サーブレットはセッションIDを認識しました。
httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());

今私の質問は次のとおりです。この方法は正しいですか?

44
hitan

この問題を解決できてとてもうれしいです。

HttpPost httppost = new HttpPost(postData); 
CookieStore cookieStore = new BasicCookieStore(); 
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId());

//cookie.setDomain("your domain");
cookie.setPath("/");

cookieStore.addCookie(cookie); 
client.setCookieStore(cookieStore); 
response = client.execute(httppost); 

とても簡単!

41
Keith Lee

HttpContextを介してCookieを渡すことでそれを行いました。

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);
22
khai
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
response = client.execute(httppost, localContext);

なしでは4.5バージョンでは動作しません

cookie.setDomain(".domain.com");
cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");
10
liliya

おそらく、Cookieの値だけでなく、すべてのCookieプロパティを設定する必要があります。 setPath()setDomain() ...など

2