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