HttpClient忽略SSL证书,附带百度网盘jar包
适用httpClient绕过ssl证书
前段时间,使用httpClient访问外部https接口时出现了需要证书的情况,这个问题解决得办法有两个
- 正儿八经的安装证书
- 绕过/忽略 证书
今天我们来使用第二种方法,绕过ssl证书访问https接口
首先上两个工具类
1.MyX509TrustManager类
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;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;}
}
MySecureProtocolSocketFactory类
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;import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;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("SSL");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);}
}
导入这两个工具类后,只需要在你请求的开头加入以下两句代码即可绕过ssl
//声明ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory();//加入相关的https请求方式Protocol.registerProtocol("https", new Protocol("https", fcty, 443));//下面便是正常的逻辑代码HttpClient client = new HttpClient();xxxxxxxx
相关jiar包:
关注公众号回复 HttpClient 即可获取百度网盘链接
HttpClient忽略SSL证书,附带百度网盘jar包相关推荐
- 2022年appium超详细环境安装步骤(Mac版本,附带百度网盘安装包)
二年没有搭建appium环境里,百度了一下,网上帖子倒是很多,但坑也是很多的,决定在此发布一篇较为详细的appium环境安装,让小伙伴们少踩坑 mac 上 Appium 环境搭建 第一步:安装 nod ...
- javascript俄罗斯方块 面向对象编程(jQuery)(附带百度网盘链接)
这个俄罗斯方块游戏是通过javascript面向对象编程的方法编写,代码结构分为游戏类(Game.js),方块类(block.js),地图类(Map.js),方块形状对象类(blockjson.js) ...
- 百度网盘下载显示系统限制,无法下载解决
百度网盘下载显示系统限制,无法下载,是文件写入权限问题,小白新手根据教程设置即可,老手可忽略. 1.打开百度网盘客户端,点击客户端右上角的设置按钮,弹出设置菜单选择 传输设置 –> 下载位置 - ...
- CodeBlocks 安装教程(百度网盘)
下载 1.在浏览器上搜索CodeBlocks官网或者直接点击该网址http://www.codeblocks.org/ 进入CodeBlocks官网. 附带百度网盘地址:链接:https://pan. ...
- coppeliasim/vrep官网软件安装包(免费百度网盘链接)
2021年10月23日更新说明:增加了官网链接 增加了CoopeliaSim Edu V4.2.0的windows.ubuntu.macOS各系统的软件包@meng 2022年4月21日更新说明:增加 ...
- 分享我的百度网盘超级会员取消自动续费流程
前几天为了在百度网盘下载一个较大的文件,普通下载速度较慢由于比较着急就顺手开通了超级会员. 当时我没有注意到购买的是百度网盘连续包月服务,到第二个月开始的时候微信支付提示又被扣了25元,仔细一看原来是 ...
- md5碰撞介绍及工具,并对百度网盘进行碰撞
md5碰撞介绍及工具,并对百度网盘进行碰撞 前言 什么是MD5 什么是MD5碰撞 md5碰撞 常见的碰撞法 差分攻击 构造前缀碰撞法 快速 MD5 碰撞生成器使用方法 百度网盘md5碰撞攻击 总结 参 ...
- 如何把百度网盘下载速度提高 100 倍,我推荐这个下载工具
转载原文 : https://blog.csdn.net/zhige_me/article/details/80465191 友情提示,如果不好使,可以看看其他几篇: 其他几个类似工具: [high- ...
- 解决百度网盘发票下载ERR_SSL_PROTOCOL_ERROR问题
在进行百度网盘的发票下载时,出现ERR_SSL_PROTOCOL_ERROR错误,即服务器SSL证书错误,发票链接地址https://bj.bcebos.com/*,解决办法:使用HTTP链接(将ht ...
- 计算机里面的百度云怎么弄消失,我换了个手机登录我的百度网盘,里面存的东西都不见了,谁能告诉我怎么弄回来么...
我换了个手机登录我的百度网盘,里面存的东西都不见了,谁能告诉我怎么弄回来么以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ...
最新文章
- 数据仓库中的维度表和事实表概述
- java内存分析_java内存分析总结
- C#——《C#语言程序设计》实验报告——面向对象程序设计——自动出题判分小程序
- linux IP 命令使用举例
- 改变ComboBox控件的高度
- 12C RAC for ASM添加磁盘步骤
- Magento教程 21:新增客户评价的满意度项目! (Add rating)
- 原创电子书:C#难点逐个击破
- flex读取bolg的代码
- Java中List.forEach()方法使用
- 1、Java多线程基础:进程和线程之由来
- jep3.5 java 动态公式
- EXCEL使用vlookup函数合并多个工作表
- C# 使用OpenXML创建PPT表格
- 接口测试-什么是header头部?
- 小程序在线客服完整实现
- Android-AIUI技能设计技巧及处理策略总结
- 怎么在php中加拼图游戏,js+html5实现可在手机上玩的拼图游戏
- 学习python记录——第五天
- 基于OpenWrt的Wol(wake on lan)远程唤醒