当前位置:   article > 正文

Android开发之Https网络请求实践_android ssl请求

android ssl请求

Android开发之Https网络请求实践


前言

最近使用VisualStudio开发APP,涉及的网络请求数据源来自于Https网络,在此进行记录,初研阶段,大神轻喷,谢谢。


一、引入okhttp

网络请求组件我们使用okhttp组件,在Module层的build.gradle中引入

implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.7'
  • 1

并点击gradle上方的Sync进行同步
okhttp3引入路径

二、创建MyTrustManager类

2.1 建一个类为MyTrustManager,实现接口X509TrustManager

代码如下(示例):

import android.annotation.SuppressLint;

import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class MyTrustManager implements X509TrustManager {
   
    @SuppressLint("TrustAllX509TrustManager")
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) {
   
        // TODO Auto-generated method stub
    }
    @SuppressLint("TrustAllX509TrustManager")
    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) {
   
        // TODO Auto-generated method stub
    }
    @Override
    public X509Certificate[] getAcceptedIssuers() {
   
        // TODO Auto-generated method stub
        return null;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

三.新建OkHttpUtil类实现Get、Post方法

3.1 类中需定义全局OkHttpClient和MediaType:

    private static final OkHttpClient mOkHttpClient;
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  • 1
  • 2

3.2 定义createSSLSocketFactory方法,用于创建SSLSocketFactory

    private static SSLSocketFactory createSSLSocketFactory() {
   
        SSLSocketFactory ssfFactory = null;
        try {
   
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{
   new MyTrustManager()}, new SecureRandom());
            ssfFactory = sc.getSocketFactory();
        } catch (Exception e) {
   
            e.printStackTrace();
        }

        return ssfFactory;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.3 定义getX509TrustManager方法用于获取X509TrustManager

    public static X509TrustManager getX509TrustManager() {
   
        X509TrustManager trustManager = null;
        try {
   
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init((KeyStore) null);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
   
                throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
            }
            trustManager = (X509TrustManager) trustManagers[0];
        } catch (Exception e) {
   
            e.printStackTrace();
        }

        return trustManager;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3.4 实现静态模块初始化util

    static {
   
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.protocols(Collections.singletonList(Protocol.HTTP_1_1));
        builder.connectTimeout(30, TimeUnit.SECONDS);


        /*
         * Modify by liuwz
         * builder.sslSocketFactory(createSSLSocketFactory());
         * */
        builder.sslSocketFactory(createSSLSocketFactory(),getX509TrustManager());
        builder.hostnameVerifier((hostname, session) -> true);

        mOkHttpClient = builder.build();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.5 新建一个方法实现通过okhttp的excute获取Response

    public static Response execute(Request r
    本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
    推荐阅读
    相关标签
      

    闽ICP备14008679号