Apache HttpClient 4.0.3 - 如何为POST请求设置带sessionID的cookie?

时间:2010-11-12 15:26:30

标签: java post cookies apache-httpclient-4.x

你能告诉我如何在cookie中存储jsessionid,所以它可以通过post请求传递给servlet吗?我正在使用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);

编辑 - 进一步说明
我正在连接朋友写的servlet。我已登录并获得jsessionid。现在我想发送另一个请求,需要传递jsessionid用于授权目的。 Servlet运行正常,因为我使用了Java HttpURLConnection,设置了cookie,传递了它并且它起作用了。现在使用HttpClient我没有异常但是来自friend的servlet的返回代码表明请求中没有sessionid。

另一个编辑 - 我有一个解决方案 我设置了请求标头的参数,它工作正常。 Servlet识别的sessionid httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());

现在我的问题是:这种方法是否正确?

3 个答案:

答案 0 :(得分:41)

我很高兴解决这个问题:

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); 

太容易了!

答案 1 :(得分:22)

我是通过将cookie传递给HttpContext来实现的:

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);

答案 2 :(得分:2)

您应该设置所有cookie属性,而不仅仅是它的值。 setPath()setDomain() ...等