1

我正在迁移我的应用程序以使用 HttpClient5,但它变得越来越糟糕。许多 API 被删除,并且没有适当的文档可用于了解替代方案。Stackoverflow/任何其他网站/博客总是显示与 httpcomponents4.x 相关的答案,但这些 API 在 HttpClient5 中不再存在。我把我所有的查询/替代方案都放在这里。如果有人知道,请回答/确认这些是否是正确的实现。

  1. 在客户端设置套接​​字超时:删除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();
    
  2. 设置默认主机。按照这个如何在 Apache HttpClient 4.3+ 中设置默认 HttpHost 目标?并发现我们可以覆盖但我们不能在 httpclient5 中执行此操作,因为这样声明的方法determineRoute无法覆盖。所以我这样做了:DefaultRoutePlannerfinal

         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();
    
  3. HttpRequestBase替换为HttpUriRequestBase - 在 HttpRequestBase 上,我们调用 getRequestLine() 来了解正在打印的请求详细信息,如下所示:

POST https://url HTTPS/1.1

但是getRequestLine()在 HttpUriRequestBase 中删除了 API,所以我这样使用:

httpReq.getMethod()+" "+httpReq.getUri() 但即使我使用它也不是打印协议httpReq.getVersion()

  1. 没有单独httpasyncclient httpcore-nio的库HttpClient5 - 经过研究,发现所有东西都捆绑在一起httpclient5-httpcore5现在更多的斗争从这里开始。以下所有类不再存在。
SSLIOSessionStrategy 
NoopIOSessionStrategy
PoolingNHttpClientConnectionManager
DefaultConnectingIOReactor
ConnectingIOReactor
IOReactorException

还不知道这个的替代品。IOReactorConfigapi不清楚。在演示示例中,IOReactorConfig设置为CloseableHttpAsyncClient没有 SSLcontext 示例。就我而言,根据现有代码,他们正在使用IOReactorConfigand SSLContext。现在不知道如何俱乐部这些。

请建议我做的是否正确。

很多其他人都在那里。会更新。

4

0 回答 0