【问题标题】:How to use Apache HttpClient while the underlying connection is stateful?如何在底层连接有状态时使用 Apache HttpClient?
【发布时间】:2011-03-28 08:03:16
【问题描述】:

我搜索了很多关于如何将 HttpClient 与多线程一起使用的信息。 他们中的大多数建议使用 ThreadSafeClientConnManager。 但是我的应用程序必须登录一些主机(登录表单页面),以便 HttpClient 获得底层的有状态连接。 多线程下ThreadSafeClientConnManager能否保持登录状态?

【问题讨论】:

  • 服务器是否使用会话 ID cookie? HTTP 中的“有状态连接”是什么意思?

标签: java multithreading httpclient


【解决方案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);

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2018-01-23
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多