超详细HttpClient加载安全证书post请求访问https示例
超详细HttpClient加载安全证书post请求访问https示例
(注:此测试java版本为1.7,经过测试java7以上(不含java7)的版本无需加载安全证书,也无需绕过安全证书就可以通过建立httpClient连接访问https网站,所以如果项目环境为Java7以上的小伙伴就不用考虑这些问题啦。)
最近公司爬虫项目因为一个网站的SSL证书升级问题,导致使用httpClient绕过SSL证书方法失效,因此尝试将该网站安全证书下载下来,将其加载到连接中去,经测试后成功问题解决。
- 浏览器(以chrome为例)访问https://www.apapanet.com/,点击域名左侧的小锁,可以查看该网站的证书信息,将信息证书导出,我这里保存为cer格式,路径为D:\Java\apapanet.cer。
- 接下来就是代码了,代码如下:
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class httpClient{public static void main(String[] args) throws Exception {// Load CertificateCertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");// 这里的路径为证书存放路径Certificate certificate = certificateFactory.generateCertificate(new FileInputStream("D:\\Java\\apapanet.cer"));// Create TrustStoreKeyStore trustStoreContainingTheCertificate = KeyStore.getInstance("JKS");trustStoreContainingTheCertificate.load(null, null);// AddCertificate 第一个参数为证书别名, 可以任取trustStoreContainingTheCertificate.setCertificateEntry("XYZ", certificate);TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStoreContainingTheCertificate);// Create SSLContext 我这里协议为TLSv1.2SSLContext sslContext = SSLContext.getInstance("TLSv1.2");sslContext.init(null,trustManagerFactory.getTrustManagers(),null);SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext);// Create custom httpClient 创建自定义httpClient连接CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build(); try{ // POST请求HttpPost method = new HttpPost("https://www.apapanet.com/");System.out.println("executing request" + method.getRequestLine());method.setHeader("Content-type", "application/json;charset=utf-8");method.setHeader("Accept", "application/json");CloseableHttpResponse response = null;response = httpClient.execute(method);int status = response.getStatusLine().getStatusCode();if (status == HttpStatus.SC_OK) {String body = EntityUtils.toString(response.getEntity());if(StringUtils.isNotBlank(body)){System.out.println("body: "+body);}}response.close();} finally {httpClient.close();}}
}
- 测试通过成功返回页面数据~~
超详细HttpClient加载安全证书post请求访问https示例相关推荐
- nginx 稳定版 1.16.0 发布,支持动态加载 SSL 证书
开发四年只会写业务代码,分布式高并发都不会还做程序员? nginx 1.16.0 稳定版已发布,包含来自 1.15.x 主线分支的新功能和错误修复: 针对流模块(stream module)中的 ...
- 为网格布局图片打造的超炫 CSS 加载动画
今天,我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果.您可以把这些效果用在你的作品集,博客或任何你想要的网页中.设置很简单.我们使用了下面这些工具库来实现这个效果: Norm ...
- openssl 从内存直接加载CA证书
参考链接 openssl 从内存加载ca证书 - Zzz...y - 博客园 (cnblogs.com) C ++ / OpenSSL:使用根CA从缓冲区而不是文件(SSL_CTX_load_veri ...
- nginx 稳定版 1.16.0 发布 支持动态加载SSL证书
Nginx(发音同 engine x)是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行,可以在 UNIX.GNU/Lin ...
- cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)
说实话,比起网站打不开,网站访问慢更让人抓狂. 因为造成网站访问慢的因素太多了,一般用户根本无从下手! 任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题 :响应时间.执行时间.加载时 ...
- IIS初始化(预加载),解决第一次访问慢,程序池被回收问题
IIS初始化(预加载),解决第一次访问慢,程序池被回收问题 参考文章: (1)IIS初始化(预加载),解决第一次访问慢,程序池被回收问题 (2)https://www.cnblogs.com/team ...
- 关于JSP页面无法加载css,游览器访问jsp页面样式未生效导致乱序
关于JSP页面无法加载css,游览器访问jsp页面样式未生效导致乱序 1.修改自己过滤器中对编码格式的修改 如图: 代码如下: public void doFilter(ServletRequest ...
- html页面加载时执行ajax请求,函数在页面加载时发送ajax请求
我有下面的代码在页面加载运行.我只想在用户完成在文本框中写入时运行它.函数在页面加载时发送ajax请求 代码是: $(document).ready(function() { $("#use ...
- 安装SSL证书后不能访问https网站怎么办
很多朋友在安装配置完SSL证书后不能访问https网站,搞不清楚问题出在哪里,更不知道如何解决.下面就以nginx配置SSL证书为例,来讲一下安装SSL证书后不能访问的解决方法. 1.确保可以以htt ...
最新文章
- 在github上创建新分支
- bzoj2049 [Sdoi2008]Cave 洞穴勘测——LCT
- Masonry('couldn't find a common superview for)
- 最大均值差异java_MATLAB最大均值差异(Maximum Mean Discrepancy)
- 资源打包后项目中的文件
- java调用oracle 存储过程 以及游标使用
- 程序员需要了解的十个高级SQL概念
- java微信第三方支付
- Mysql学习总结(57)——MySQL查询当天、本周、本月、上周、本周、上月、距离当前现在6个月数据
- Linux学习总结(33)——Linux Java启动关闭bash脚本
- ftp服务器通信协议设计,基于FTP协议的文件传输服务器的研究
- 逆向工具IDA安装教程
- python-自制单词本导入有道词典
- 购买的域名设置域名解析
- 正则表达式lookahead and lookbehind zero-length assertions
- 如何检测页面是否允许访问Cookie
- flashpaper java_FlashPaper API 说明
- 11 寻找峰值(Find Peak Element)
- 动态标题文字PR模板 300+高质量MOGRT字幕PR动态图形模板包
- 人工势场法路径规划算法(APF)