Java 如何在底层连接有状态时使用Apache HttpClient?

Java 如何在底层连接有状态时使用Apache HttpClient?,java,multithreading,httpclient,Java,Multithreading,Httpclient,我在谷歌上搜索了很多关于如何将HttpClient与多线程结合使用的信息。 大多数建议使用ThreadSafeClientConnManager。 但我的应用程序必须登录某个主机(一个登录表单页面),以便HttpClient获得底层有状态连接。 如果使用多线程,ThreadSafeClientConnManager能否保持登录状态?是,HttpClient将使用线程安全连接管理器保持状态(例如会话cookie) 如果您在登录时遇到任何问题,请尝试切换到“浏览器兼容性”cookie策略 clien

我在谷歌上搜索了很多关于如何将HttpClient与多线程结合使用的信息。 大多数建议使用ThreadSafeClientConnManager。 但我的应用程序必须登录某个主机(一个登录表单页面),以便HttpClient获得底层有状态连接。
如果使用多线程,ThreadSafeClientConnManager能否保持登录状态?

是,HttpClient将使用线程安全连接管理器保持状态(例如会话cookie)

如果您在登录时遇到任何问题,请尝试切换到“浏览器兼容性”cookie策略

client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);

请阅读本页的以下部分: 3.8. HTTP状态管理和执行上下文 3.9. 每用户/线程状态管理

这可能就是你想要的代码:

HttpClient httpclient = new DefaultHttpClient();
// Create a local instance of cookie store
CookieStore cookieStore = new BasicCookieStore();
// Create local HTTP context
HttpContext localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet httpget = new HttpGet("http://www.google.com/"); 
// Pass local context as a parameter
HttpResponse response = httpclient.execute(httpget, localContext);

服务器是否使用会话ID cookie?您所说的“有状态连接”wrt HTTP是什么意思?请提供帮助,谢谢。它确实有效。顺便问一下,哪个文档解释了此功能?文档: