微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HttpClient5 - 许多 API 已更改/删除

如何解决HttpClient5 - 许多 API 已更改/删除

我正在迁移我的应用程序以使用 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. 设置认主机。按照这个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();
    
  3. HttpRequestBase 替换为 HttpUriRequestBase - 在 HttpRequestBase 上,我们调用 getRequestLine() 以了解打印如下的请求详细信息:

POST https://url HTTPS/1.1

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

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

  1. 没有单独的 httpasyncclient httpcore-nio 库用于 HttpClient5 - 经过研究,发现所有东西都捆绑在 httpclient5 和 {{1 }} - 现在更多的斗争从这里开始。以下所有类都不再存在。
httpcore5

还不知道这个的替代方案。 SSLIOSessionStrategy NoopIOSessionStrategy PoolingNHttpClientConnectionManager DefaultConnectingIOReactor ConnectingIOReactor IOReactorException api 不清楚。在演示示例中,IOReactorConfig 设置在 IOReactorConfig 上,没有 SSLcontext 示例。在我的情况下,根据现有代码,他们使用 CloseableHttpAsyncclientIOReactorConfig 。现在不知道如何俱乐部。

请建议我做的是否正确。

还有很多人在那里。会更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?