java抓取Https协议url地址的源码的方法

阅读本文之前,请先阅读下文,通过下文将获取到keystore文件:

http://www.oschina.net/code/snippet_273576_18919

在此,感谢一下stevenliu ,不过经过我的测试,发现stevenliu 文章中的源码并没有抓取到页面源码。可能是我项目里面的HttpClient版本较高的原因。下面这个方法没有问题:

1package org.phoenix.cases.webservice; 2import java.io.FileInputStream; 3import java.io.InputStreamReader; 4import java.net.URL; 5import java.security.KeyStore; 6import java.security.SecureRandom; 7import java.security.cert.CertificateException; 8import java.security.cert.X509Certificate; 9import java.util.List; 10import javax.net.ssl.HttpsURLConnection; 11import javax.net.ssl.SSLContext; 12import javax.net.ssl.SSLSocketFactory; 13import javax.net.ssl.TrustManager; 14import javax.net.ssl.TrustManagerFactory; 15import javax.net.ssl.X509TrustManager; 16import org.apache.commons.io.IOUtils; 17/** 18 * java通过加载认证证书,抓取https的url源码方法 19 * @author mengfeiyang 20 * 21 */ 22public class MyX509TrustManager implements X509TrustManager { 23    private X509TrustManager sunJSSEX509TrustManager; 24    25    public MyX509TrustManager(String keystoreFile,String pass) throws Exception { 26        KeyStore ks = KeyStore.getInstance("JKS"); 27        ks.load(new FileInputStream(keystoreFile),pass.toCharArray()); 28        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE"); 29        tmf.init(ks); 30        TrustManager tms [] = tmf.getTrustManagers(); 31        for (int i = 0; i < tms.length; i++) { 32            if (tms[i] instanceof X509TrustManager) { 33                sunJSSEX509TrustManager = (X509TrustManager) tms[i]; 34                return; 35            } 36        } 37        throw new Exception("Couldn't initialize"); 38    } 39     40    @Override 41    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 42        try { 43            sunJSSEX509TrustManager.checkClientTrusted(chain, authType); 44        } catch (CertificateException excep) { 45         excep.printStackTrace(); 46        } 47    } 48    @Override 49    public void checkServerTrusted(X509Certificate[] chain, String authType) { 50        try { 51            sunJSSEX509TrustManager.checkServerTrusted(chain, authType); 52        } catch (CertificateException excep) { 53         excep.printStackTrace(); 54        } 55    } 56    @Override 57    public X509Certificate[] getAcceptedIssuers() { 58        return sunJSSEX509TrustManager.getAcceptedIssuers(); 59    } 60     61    public static void main(String[] args) throws Exception { 62        TrustManager[] tm = { new MyX509TrustManager("E:\\mycert.keystore","123456") }; 63        SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); 64        sslContext.init(null, tm, new SecureRandom()); 65        SSLSocketFactory ssf = sslContext.getSocketFactory(); 66        URL myURL = new URL("https://beta.tf.360.cn/search/mapi?keyword=途牛"); 67        HttpsURLConnection httpsConn = (HttpsURLConnection) myURL.openConnection(); 68        httpsConn.setSSLSocketFactory(ssf); 69        InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream()); 70        List<String> ls = IOUtils.readLines(insr); 71         72        for(String l : ls){ 73         System.out.println(l);//打印源码 74        } 75         76        httpsConn.getResponseCode();//获取的状态码 77 } 78}

在我的phoenixframework自动化平台的接口测试模块中,下个版本将会增加https的操作。因为发现现在越来越多的网站是https了。phoenixframework平台网站:http://www.cewan.la

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )