android开发中,现在业务中用https的请求用的越来越多了,如果不了解https的请先看https请求的原理,现在android用的比较多的网络请求库就是retrofit了,在这里不主要介绍retrofit。如果要retrofit来做https请求,实际上retrofit是对okHttp的一个封装,那我们只需要修改okHttp就好了,在这里用spring boot做了一个简单的https请求的服务端,返回的页面如下retrofit做https请求Demo

那我们就去请求这个页面上的数据,我这里写的是get请求,服务端的代码会在后面链接中,这里主要说明的是android端的代码,首先在app下面的build.gradle添加retrofit的依赖,

'com.squareup.retrofit2:retrofit:2.4.0'
'com.squareup.retrofit2:converter-scalars:2.4.0'

然后我们创建https请求中要用到的证书管理类x509trustmanager 

public class SSLTrustAllManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}

然后再去获取要用的SSLScoketFactory,这个主要是扩展Socket并提供使用SSL或TLS协议的安全套接字,实现https请求的

public class SSLSocketClient {
    //获取这个SSLSocketFactory
    public static SSLSocketFactory getSSLSocketFactory() {
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, getTrustManager(), new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //获取TrustManager
    public static TrustManager[] getTrustManager() {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[]{};
            }
        }};
        return trustAllCerts;
    }

    //获取HostnameVerifier
    public static HostnameVerifier getHostnameVerifier() {
        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                return true;
            }
        };
        return hostnameVerifier;
    }
}

最后我们在MainActivity中实现我们的网络请求,我们的Https请求到此结束。

public class MainActivity extends AppCompatActivity {

    private TextView tv_test;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_test = findViewById(R.id.tv_test);
        initRetrofit();
    }

    private void initRetrofit() {
        Retrofit.Builder builder = new Retrofit.Builder();
        builder.baseUrl("https://192.168.144.169:8443")
                .addConverterFactory(ScalarsConverterFactory.create())
                .client(OkHttpUtils.getOkHttpClient().getBuild())
                .build().create(APIService.class).getUsers().enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                tv_test.setText(response.body());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                tv_test.setText(t.getLocalizedMessage());
            }
        });
    }

    public interface APIService {
        @GET("/")
        Call<String> getUsers();
    }
}

最后运行的显示我也贴一下图retrofit做https请求Demo

这里贴出基于spring boot的这个https请求的服务端代码:点击打开链接

这里是android代码:点击打开链接

如有有问题请留言。欢迎交流。

相关文章:

  • 2022-12-23
  • 2021-04-20
  • 2021-09-10
  • 2021-12-15
  • 2021-12-28
  • 2022-02-03
  • 2021-06-08
猜你喜欢
  • 2021-06-24
  • 2022-12-23
  • 2022-01-14
  • 2021-07-12
  • 2021-12-16
  • 2021-06-08
  • 2021-09-04
相关资源
相似解决方案