Apache HttpClient 4.0.3 - 如何为POST请求设置带有会话ID的cookie?

2022-09-01 00:32:00

你能告诉我如何将jsessionid存储在cookie中,以便可以通过发布请求将其传递给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用于授权目的。Servlet工作正常,因为我使用了java HttpURLConnection,设置了cookie,传递了它,它就可以工作了。现在使用HttpClient,我没有得到任何例外,但是来自朋友的servlet的返回代码表明请求中没有会话ID。jsessionid

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

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


答案 1

我很高兴能解决这个问题:

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

如此简单!


答案 2

我通过HttpContext传递cookie来做到这一点:

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);