从HttpClient4升级到HttpClient5,坑坑坑

我最近要把HttpClient4升级到HttpClient5,在升级的过程中,发现许多 API 已删除了,并且也没有找到非常合适的文档可用于全面了解升级方案。

目前网上的博客或者帖子大部分都是与httpcomponents4.x 相关的回答,但这些 API 在HttpClient5里,已经被删除或者修改了。

我把我目前用到的或者查询到的备选方案先写出来。如果有高手,请指正这些中的问题。

1.设置Socket套接字超时

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();

2.设置默认主机

按照How does one set Default HttpHost Target in Apache HttpClient 4.3+? 这篇文章,发现可以覆盖DefaultRoutePlanner的determineRoute方法。但在 HttpClient5中却没有办法这么整,因为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

在HttpClient4的 HttpRequestBase 中,我们可以调用 getRequestLine()方法来打印请求的详细信息,如下所示:

POST https://url HTTPS/1.1

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

httpReq.getMethod()+" "+httpReq.getUri()

4.没有单独的httpasyncclient、 httpcore-nio库

经过研究,发现以前httpclient4的很多类,从httpclient5开始都没有了。比如以下所有类都被干掉了

SSLIOSessionStrategy 
NoopIOSessionStrategy
PoolingNHttpClientConnectionManager
DefaultConnectingIOReactor
ConnectingIOReactor
IOReactorException

目前还没找到这些类的替代方案。

以后找到了,会持续更新

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值