Android开发之Https网络请求实践

Android开发之Https网络请求实践


前言

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


一、引入okhttp

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

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

并点击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;
    }

}

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

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

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

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;
    }

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;
    }

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();
    }

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

    public static Response execute(Request request) throws IOException {
   
        return mOkHttpClient.newCall(request).execute();
    }

3.6 创建get请求方法

    public static String get(String url) throws IOException {
   
        Request request = new Request.Builder().url(url).build();
        Response response = mOkHttpClient.newCall(request).execute(
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

informationchina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值