您当前的位置: 首页 >  http

小枫_S

暂无认证

  • 5浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

android httpClient(https/http)的优化构建方式二

小枫_S 发布时间:2016-04-25 17:09:47 ,浏览量:5

转自http://my.oschina.net/ososchina/blog/339897 摘要 之前一遍博客是使用Apache的HttpClient进行创建的,这里我们使用纯Java代码来进行设置

由于时间原因,这里只构建所有请求https都能通过的请求client

首先定义(重写)信任管理器

 public class SSLTrustManager implements javax.net.ssl.TrustManager,
            javax.net.ssl.X509TrustManager ,HostnameVerifier{
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(
                java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }

            @Override
        public boolean verify(String urlHostName, SSLSession session) { //允许所有主机
            return true;
        }
    }

然后封装

 public static HttpURLConnection connect(String strUrl) throws Exception {

         javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
         javax.net.ssl.TrustManager tm = new SSLTrustManager();
         trustAllCerts[0] = tm;
         javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
                 .getInstance("SSL");
         sc.init(null, trustAllCerts, null);
         javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
                 .getSocketFactory());

         HttpsURLConnection.setDefaultHostnameVerifier((HostnameVerifier) tm);

        URL url = new URL(strUrl);
        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

        return urlConn;
    }

测试一下

public void unitest()
{
     HttpURLConnection urlConn = connect('https://github.com/');
        urlConn.setDoInput(true);
        urlConn.setRequestMethod("GET");
        urlConn.connect();
        InputStream is = urlConn.getInputStream();
        StringBuffer sb = new StringBuffer();
        if(is!=null)
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String s = null;
            while ((s=br.readLine())!=null)
            {
                sb.append(s).append("\n");
            }
        }
        System.out.println("Content:\n"+sb.toString());
}

try do it!

关注
打赏
1495089800
查看更多评论
立即登录/注册

微信扫码登录

0.0745s