问题描述
我正在迁移我的应用程序以使用 HttpClient5,但它一天比一天变得悲惨。删除了许多 API,并且没有适当的文档可用于了解替代方案。 Stackoverflow/任何其他网站/博客总是显示与 httpcomponents4.x 相关的答案,但这些 API 不再存在于 HttpClient5 中。我把我所有的查询/替代方案都放在这里。如果有人知道,请回答/确认这些是否是正确的实现。
-
在客户端设置套接字超时:删除了
上设置RequestConfig.custom().setSocketTimeout(socketTimeout).build()
API。经过大量研究,发现有单独的 SocketConfig 类需要在ConnectionManager
SocketConfig socketConfig=SocketConfig.custom() .setSoTimeout(Timeout.ofMilliseconds(10000)) .build(); BasicHttpClientConnectionManager connMgr=new BasicHttpClientConnectionManager(registry); connMgr.setSocketConfig(socketConfig); CloseableHttpClient httpclient = HttpClients.custom() .setConnectionManager(connMgr) .build();
-
设置默认主机。按照这个How does one set Default HttpHost Target in Apache HttpClient 4.3+?,发现我们可以覆盖
determineRoute
中的DefaultRoutePlanner
,但是我们不能在httpclient5中这样做方法声明为final
,因此无法覆盖。所以我这样做了:HttpHost targetHost = new HttpHost(myHost,myPort); HttpRoutePlanner planner=new HttpRoutePlanner() { @Override public HttpRoute determineRoute(HttpHost var1,HttpContext var2) throws HttpException { HttpRoute route=new HttpRoute(targetHost);//default for all requests return route; } }; CloseableHttpClient client=HttpClients.custom() .setConnectionManager(mgr) .setRoutePlanner(planner) .build();
-
HttpRequestBase
替换为HttpUriRequestBase
- 在 HttpRequestBase 上,我们调用 getRequestLine() 以了解打印如下的请求详细信息:
POST https://url HTTPS/1.1
但是在 HttpUriRequestBase 中删除了 getRequestLine()
API,所以我是这样使用的:
httpReq.getmethod()+" "+httpReq.getUri()
但它不是打印协议,即使我使用 httpReq.getVersion()
-
没有单独的
httpasyncclient
httpcore-nio
库用于HttpClient5
- 经过研究,发现所有东西都捆绑在httpclient5
和 {{1 }} - 现在更多的斗争从这里开始。以下所有类都不再存在。
httpcore5
还不知道这个的替代方案。 SSLIOSessionStrategy
NoopIOSessionStrategy
PoolingNHttpClientConnectionManager
DefaultConnectingIOReactor
ConnectingIOReactor
IOReactorException
api 不清楚。在演示示例中,IOReactorConfig
设置在 IOReactorConfig
上,没有 SSLcontext 示例。在我的情况下,根据现有代码,他们使用 CloseableHttpAsyncclient
和 IOReactorConfig
。现在不知道如何俱乐部。
请建议我做的是否正确。
还有很多人在那里。会更新。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)