Java 如何使用多线程操作的HttpClient?

Java 如何使用多线程操作的HttpClient?,java,multithreading,httpclient,Java,Multithreading,Httpclient,我需要做一个应用程序,在某个主机上执行登录POST请求,然后导航一些页面,查找和检索一些数据。 因为网站资源受会话保护,所以我必须先登录网站,然后才能执行一些操作,例如获取或发布一些数据。 我的问题是,因为HttpClient不是线程安全的,所以如何只创建一个HttpClient实例,而线程可以在其上安全地执行? 请记住,在使用底层连接进行操作之前,它必须先登录。这里有一个答案:您可以通过指定线程安全的客户端管理器使HttpClient线程安全 API: 示例:我已经读过了,但这不是我想要的。

我需要做一个应用程序,在某个主机上执行登录POST请求,然后导航一些页面,查找和检索一些数据。 因为网站资源受会话保护,所以我必须先登录网站,然后才能执行一些操作,例如获取或发布一些数据。 我的问题是,因为HttpClient不是线程安全的,所以如何只创建一个HttpClient实例,而线程可以在其上安全地执行?
请记住,在使用底层连接进行操作之前,它必须先登录。

这里有一个答案:

您可以通过指定线程安全的客户端管理器使HttpClient线程安全

API:


示例:

我已经读过了,但这不是我想要的。在帖子中,你建议HttpClient的版本是3.x。我使用的是4.x,我需要有状态连接才能使用,而不是无状态连接。如果建议使用无状态ThreadSafeClientConnManager,但如果需要有状态连接怎么办?好文章是的,我可以。据我所知,HttpClient使用单一连接。如果我使用ThreadSafeClientConnManager,它是否可以保存我的第一次登录会话?是的,状态与连接无关。例如,如果请求1设置了cookie,那么请求2(对于同一个域)也可以通过线程安全连接管理器看到cookie。好的,非常感谢!我将再试一次。请记住,ThreadSafeClientConnManager在4.2版之后已被弃用,请改用。有关如何在4.2版之后设置池客户端连接管理器的示例,请参阅