HttpClient 4.5.x 之后 Deprecated 废弃API 的替代对应策略

在《扫清盲点,如何正确的从HttpClient 3.x系统升级到HttpClient 4.x》一文中已经详细的指明 HttpClient 3.x 迁移到 HttpClient 4.x 相关的变更点以及升级替换策略。本文针对HttpClient 4.5.x 之后 被 @Deprecated 注解后的废弃 / 过期 API(SSL证书验证相关),如何进行替换进行相关总结。

1.   针对 SSLContext 和 SSLContextBuilder 过期的替换

如果是在 HttpClient 4.5.x 之前,访问https的时候使用SSLContextBuilder来建立对象,那么在代码中会看到过期的语法提示,
在IDEA中使用 Alt + Enter 会出现提示在4.5.x的SSLContextBuilder已经过期,替换策略为:删除原来的import,重新导入 httpcore jar中的SSLContextBuilder进行替换。

经调查发现:SSLContext 和 SSLContextBuilder 的API从原来的 org.apache.http.conn.ssl 包挪到了 org.apache.http.ssl 包,基本的用法什么的都没有变化。

 替换代码如下,删除掉旧的import,导入新的 org.apache.http.ssl 下的引用

// Fixing deprecated code to use current HttpClient implementations      Sekito.Lv 01/30/2019 11:29     Start
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.SSLContextBuilder;

//import org.apache.http.conn.ssl.SSLContexts;
//import org.apache.http.conn.ssl.SSLContextBuilder;
// Fixing deprecated code to use current HttpClient implementations      Sekito.Lv 01/30/2019 11:29     End

2.    针对 4.4.x 之后版本 SSLConnectionSocketFactory 中静态变量过期的替换

在 SSLConnectionSocketFactory 中静态变量有如下3个

  • STRICT_HOSTNAME_VERIFIER
  • BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
  • ALLOW_ALL__HOSTNAME_VERIFIER

在代码源码中可以看到该三个静态变量都已经被 @Deprecated 注解了,在方法中使用会出现过期提示

替换策略如下

在《扫清盲点,如何正确的从HttpClient 3.x系统升级到HttpClient 4.x》一文中HttpClient 3.x 和 4.x 废弃API一览里已经给出过期API的官方链接,在这里面可以查到新的替换API

ALLOW_ALL_HOSTNAME_VERIFIER → NoopHostnameVerifier
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER → DefaultHostnameVerifier
STRICT_HOSTNAME_VERIFIER →  DefaultHostnameVerifier

示例代码

// Fixing deprecated code to use current HttpClient implementations         Sekito.Lv 01/30/2019 11:29     Start

          // 4.4 之前用法,已经过期的API
//        SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(
//                sslContext, new String[] { "TLSv1" }, null,
//                SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

        SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(
                sslContext, new String[] { "TLSv1" }, null,
                new DefaultHostnameVerifier());
// Fixing deprecated code to use current HttpClient implementations         Sekito.Lv 01/30/2019 11:29     End

本文原创由`bluetata`发布于blog.csdn.net、转载请务必注明出处。

 

Flag Counter

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluetata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值