2011-03-28 20 views
2

我已经搜索了很多关于如何在多线程中使用HttpClient的问题。大多数人建议使用ThreadSafeClientConnManager。 但我的应用程序必须登录某个主机(登录表单页面),以便HttpClient获得基础状态连接。 如果多线程,ThreadSafeClientConnManager是否可以保持登录状态?如何在底层连接有状态时使用Apache HttpClient?

+0

服务器是否使用会话ID的Cookie? “有状态连接”与HTTP的含义是什么? – Ramon 2011-03-28 08:09:13

回答

0

是的,HttpClient将维护线程安全连接管理器的状态(例如会话cookie)。

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

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

Grate help,谢谢Shamit。它的工作really.btw哪个文件解释这个功能? – wangyin 2011-03-28 13:05:49

+0

文档:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html – 2011-03-28 13:42:11

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); 
相关问题