android开发中,现在业务中用https的请求用的越来越多了,如果不了解https的请先看https请求的原理,现在android用的比较多的网络请求库就是retrofit了,在这里不主要介绍retrofit。如果要retrofit来做https请求,实际上retrofit是对okHttp的一个封装,那我们只需要修改okHttp就好了,在这里用spring boot做了一个简单的https请求的服务端,返回的页面如下
那我们就去请求这个页面上的数据,我这里写的是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(); } }
最后运行的显示我也贴一下图
这里贴出基于spring boot的这个https请求的服务端代码:点击打开链接
这里是android代码:点击打开链接
如有有问题请留言。欢迎交流。
本文详细介绍如何在Android应用中实现HTTPS请求。通过创建自定义的信任管理器,并利用SSLSocketFactory来处理安全连接,最终借助Retrofit发起GET请求。文中还提供了完整的代码示例。
684

被折叠的 条评论
为什么被折叠?



