我已经搜索了很多关于如何在多线程中使用HttpClient的信息。 他们中的大多数建议使用ThreadSafeClientConnManager。 但是我的应用程序必须登录一些主机(登录表单页面),以便HttpClient获得底层的有状态连接。 如果多线程,ThreadSafeClientConnManager可以保持登录状态吗?
答案 0 :(得分:1)
请阅读此页面中的以下部分:HttpClient Tutorial about Cookies and state management 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);
答案 1 :(得分:0)
是的,HttpClient将使用线程安全连接管理器维护状态(例如会话cookie)。
如果您在登录时遇到任何问题,请尝试切换到“浏览器兼容性”Cookie政策。
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);