一.commons-httpclient 3.1 包。一般请求采用最新的httpclient4.5就可以了

<dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version>
</dependency>

二.实现3个类

1.MyX509TrustManager(方法直接实现X509TrustManager,X509TrustManager在javax.net.ssl.X509TrustManager里面)

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;public class MyX509TrustManager implements X509TrustManager {/* (non-Javadoc)* @see javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String)*/public void checkClientTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {}/* (non-Javadoc)* @see javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String)*/public void checkServerTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {}/* (non-Javadoc)* @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()*/public X509Certificate[] getAcceptedIssuers() {return null;}
}

2.MySecureProtocolSocketFactory(需要用到SSLContext,改写一个实现SecureProtocolSocketFactory的方法)

注意:SSLContext context = SSLContext.getInstance("SSL");不同编译环境对应的请求证书不一样,错误的版本会导致报错

请求时报如下错:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

(注:JDK版本的默认协议,我当前用的是JDK1.7所以JDK1.7默认使用的是TLSv1.0,虽然JDK1.7也支持TLSv1.2 TLSv1.1

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.HttpClientError;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory;
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory {//添加一个属性,主要目的获取ssl跳过验证private SSLContext sslContext = null;/*** Constructor for MySecureProtocolSocketFactory.*/public MySecureProtocolSocketFactory() {}/*** 创建一个获取SSLContext的方法,导入MyX509TrustManager进行初始化* @return*/private static SSLContext createEasySSLContext() {try {SSLContext context = SSLContext.getInstance("根据环境去配置不同版本:TLSv1.0");context.init(null, new TrustManager[] { new MyX509TrustManager() },null);return context;} catch (Exception e) {throw new HttpClientError(e.toString());}}/*** 判断获取SSLContext* @return*/private SSLContext getSSLContext() {if (this.sslContext == null) {this.sslContext = createEasySSLContext();}return this.sslContext;}//后面的方法基本上带入相关参数/** (non-Javadoc)** @see org.apache.commons.httpclient.protocol.ProtocolSocketFactory#createSocket(java.lang.String,*      int, java.net.InetAddress, int)*/public Socket createSocket(String host, int port, InetAddress clientHost,int clientPort) throws IOException, UnknownHostException {return getSSLContext().getSocketFactory().createSocket(host, port,clientHost, clientPort);}/** (non-Javadoc)** @see org.apache.commons.httpclient.protocol.ProtocolSocketFactory#createSocket(java.lang.String,*      int, java.net.InetAddress, int,*      org.apache.commons.httpclient.params.HttpConnectionParams)*/public Socket createSocket(final String host, final int port,final InetAddress localAddress, final int localPort,final HttpConnectionParams params) throws IOException,UnknownHostException, ConnectTimeoutException {if (params == null) {throw new IllegalArgumentException("Parameters may not be null");}int timeout = params.getConnectionTimeout();if (timeout == 0) {return createSocket(host, port, localAddress, localPort);} else {return ControllerThreadSocketFactory.createSocket(this, host, port,localAddress, localPort, timeout);}}/** (non-Javadoc)** @see SecureProtocolSocketFactory#createSocket(java.lang.String,int)*/public Socket createSocket(String host, int port) throws IOException,UnknownHostException {return getSSLContext().getSocketFactory().createSocket(host, port);}/** (non-Javadoc)** @see SecureProtocolSocketFactory#createSocket(java.net.Socket,java.lang.String,int,boolean)*/public Socket createSocket(Socket socket, String host, int port,boolean autoClose) throws IOException, UnknownHostException {return getSSLContext().getSocketFactory().createSocket(socket, host,port, autoClose);}
}

3.httpclient实现的方式很简单,只要声明MySecureProtocolSocketFactory加入就可以了Protocol

import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
/** 利用HttpClient进行post请求的工具类*/
public class HttpClientUtil {public static String doGet(String url) throws Exception {//声明ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory();//加入相关的https请求方式Protocol.registerProtocol("https", new Protocol("https", fcty, 443));//发送请求即可【后续请求可参考其他工具类完成,跳过认证只需要配置上面的声明就可以了】org.apache.commons.httpclient.HttpClient httpclient = new org.apache.commons.httpclient.HttpClient();GetMethod httpget = new GetMethod(url);System.out.println("======url:" + url);try {httpclient.executeMethod(httpget);return httpget.getResponseBodyAsString();} catch (Exception ex) {ex.printStackTrace();throw new Exception(ex.getMessage());} finally {httpget.releaseConnection();}}}

总结

只要声明MySecureProtocolSocketFactory加入Protocol,然后就可以实现认证跳过了

httpclient 3.1跳过https请求SSL的验证相关推荐

  1. Python3处理HTTPS请求 SSL证书验证

    Python3处理HTTPS请求 SSL证书验证 金融类的公司网站一般都是https 开头的网站,urllib.request可以为 HTTPS 请求验证SSL证书,就像web浏览器一样,如果网站的S ...

  2. OkhttpUtils的https请求 ssl证书验证

    设置可访问所有的https网站HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);OkH ...

  3. HTTPS的SSL单向验证和双向验证

    HTTPS的SSL单向验证和双向验证 ​ HTTPs利用SSL/TLS建立安全信道,加密数据包,主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性 SSL/TLS ​ TLS在传输 ...

  4. java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题

    受益于谷歌和苹果对 HTTPS 的强制升级要求,服务已经全面升级了,安全性提高的同时也引起了新的问题. 由于 HTTPS 证书还是很贵的,所以各种测试环境上各种非法证书,通过浏览器访问的时候可以直接选 ...

  5. java 发起HTTPS请求-SSL客户端

    一:采取文章:http://blog.sina.com.cn/s/blog_afe616ab0101eerj.html public static void main1()throws Excepti ...

  6. python ssl连接 证书验证失败_即使在添加CA证书之后,Python也会请求SSL证书验证失败...

    我一直在使用Python Requests库来刮取网站一段时间,但该网站最近更改了SSL证书,新的证书将无法验证请求 . 根据类似问题的答案,我已将请求和urllib3更新到最新版本(2.4.3和1. ...

  7. c# https请求忽略证书验证_c# https绕过证书

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. c# https请求忽略证书验证_C# httpwebrequest访问HTTPS错误处理方法

    C# httpwebrequest访问HTTPS链接时遇到这个错误,但是如果我开抓包工具,比如filddler2,则POST返回正常 错误提示的Message为: 基础连接已经关闭: 发送时发生错误. ...

  9. iOS之支持https与ssl双向验证(包含:解决UIWebView加载不了https网页的图片,css,js等外部资源)

    http://blog.csdn.net/luochuanad/article/details/53410537

  10. 访问HTTPS请求遇到SSL信任问题

    在Java编程中,请求远程https链接的时候,如果报了这个错误该如何解决呢? javax.net.ssl.SSLHandshakeException: sun.security.validator. ...

最新文章

  1. 项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery
  2. 图论 ---- C. Nastya and Unexpected Guest(图上最短路dp + 01bfs)
  3. 加速业务交付,从 GKE 上使用 Kubernetes 和 Istio 开始
  4. 自动摘要php,phpcms修改手动摘要255字符、自动摘要200字符及取消自动摘要
  5. 两用物项许可证办理流程_一指通 | 出口许可证办理流程
  6. VB 和Flex交互总结
  7. android-Handler
  8. SQL数据库中主键和外键的应用实例
  9. SSM框架原理流程及使用方法
  10. 电池充电语音警报——隐私政策
  11. 学习python的感受
  12. Activiti工作流会签设计
  13. 台达变频器vfb—d参数表_台达DPS
  14. 带有行间距的UILabel 高度自适应 总结
  15. 划水摸鱼的时候写一篇自己是怎么划水摸鱼的
  16. echart 时间滚动_echarts x,y轴数据太长自动滚动(每次只显示固定数量,定时滚动显示其它)...
  17. sja1000 中断_SJA1000的错误中断处理
  18. Qt5学习 模仿qq音乐播放器样式(1)
  19. 115一直正在连接服务器失败怎么办,TCP连接错误115正在进行操作原因是什么?
  20. GitHub上最火的22个Android开源项目源码(最少的一个也超过10k star)

热门文章

  1. 【多目标追踪算法】多目标跟踪评价指标
  2. matlab eemd输出,MATLAB信号处理EEMD工具箱
  3. uniapp 获取屏幕高度
  4. STM32采集电流互感器(电流互感器模块)数据
  5. 基于java实现的一个电话号码程序,3位,5位,7位,8位,11位
  6. pdf文件过大如何缩小?
  7. 程序员眼中的中国传统文化_王阳明《传习录》2
  8. excel怎么设置打印区域_学会Excel分页符设置,打印区域自由选择
  9. 行政区域村级划分数据库_最新行政区划省市区街道乡镇数据库 每月更新版
  10. 他是清华大学唯一没学历教授,侵华日军都下令保护的大师级人物