Apache HttpClient 4.0.3 – 如何为POST请求设置cookie和sessionID
你能告诉我如何将jsessionid存储在cookie中,所以它可以通过post请求传递给servlet吗? 我正在使用Apache HttpClient版本4.0.3。 我find的所有解决scheme都解释了如何使用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。 我已经login并获得了jsessionid
。 现在我想发送另一个请求,并需要通过jsessionid授权的目的。 Servlet工作正常,因为我使用java HttpURLConnection,设置cookie,通过它,它的工作。 现在使用HttpClient,我没有得到任何exception,但来自friend的servlet的返回码表明请求中没有sessionid。
另一个编辑 – 我有一个解决scheme,我设置请求头的参数,它的工作。 Servlet识别的sessionid。
httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());
现在我的问题是:这个方法是否正确?
我很高兴解决这个问题:
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);
太简单!
我通过传递cookie通过HttpContext:
HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); response = client.execute(httppost, localContext);
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");
你应该设置所有的cookie属性,而不仅仅是它的值。 setPath()
, setDomain()
…等