Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache HttpClient 4.0.3-如何为POST请求设置带有sessionID的cookie?_Java_Post_Cookies_Apache Httpclient 4.x - Fatal编程技术网

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

Java Apache HttpClient 4.0.3-如何为POST请求设置带有sessionID的cookie?,java,post,cookies,apache-httpclient-4.x,Java,Post,Cookies,Apache Httpclient 4.x,您能告诉我如何在cookie中存储jsessionid,以便通过post请求将其传递给servlet吗?我使用的是ApacheHttpClient版本4.0.3。 我找到的所有解决方案都解释了如何使用HttpClient 3.1实现这一点。 我已经阅读了教程并尝试了这个方法,但它不起作用 HttpPost httppost = new HttpPost(postData); CookieStore cookieStore = new BasicCookieStore(); BasicClient

您能告诉我如何在cookie中存储jsessionid,以便通过post请求将其传递给servlet吗?我使用的是ApacheHttpClient版本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工作正常,因为我使用了JavaHttpUrlConnection,设置了cookie,传递了cookie,它就工作了。现在,对于HttpClient,我没有得到任何异常,但是来自朋友的servlet的返回代码表明请求中没有sessionid

另一次编辑-我有一个解决方案 我设置了请求头的参数,它工作了。Servlet识别的会话ID。
httppost.setHeader(“Cookie”、“JSESSIONID=“+getSessionId())


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

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

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);

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

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 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的情况下发送的?你能提供一个网络协议转储吗?试试Fiddler看看到底发生了什么。非常感谢!我设法让服务器通过以下方式识别cookie:httppost.setHeader(“cookie”,“JSESSIONID=“+getSessionId());简直太棒了!!你保存我的密钥是设置域和路径。我花了很多时间来解决cookie的问题,服务器不想接受我的请求,但是firebug和chrome开发工具显示,除了value之外,所有cookien参数都是空的。只有当我设置域和路径值时,请求才成功。谢谢。由于AbstractHttpClient公开了setCookieStore方法,从4.3版开始,这种方法现在已经被弃用了@khai的方法现在是首选方法。从未来更新:对于apache http客户端>=4.5,您还需要答案。您应该使用HttpClientContext,而不是现在标记为不推荐的ClientContext。从未来更新:对于apache http客户端>=4.5,您还需要答案。欢迎访问此站点!这是2010年的一个Q,有两个答案,都有一大堆投票。我不确定额外的、不精确的提示是否对任何人都有帮助。我还在另一个主题中找到了这个答案,真的,它应该设置域。