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 4.5.x 之后 Deprecated 废弃API 的替代对应策略_第1张图片

替换策略如下

在《扫清盲点,如何正确的从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、转载请务必注明出处。

 

HttpClient 4.5.x 之后 Deprecated 废弃API 的替代对应策略_第2张图片

你可能感兴趣的:([01],Java,[01],网络爬虫)