用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
### 简介 ### Https双向认证主要是为了保证信息安全,组件需要保证能够支持https双向认证。 需要将核心库依赖版本更新为 ``` compile 'com.tenma.ventures:tm_core:1.1.48' ``` 主要方法: ``` SSLHelper.needSSL 判断是否需要双向认证。 ``` ``` SSLSocketFactory getSSLSocketFactory(Context context) 获取SSL证书,当不需要双向认证时,返回null。 ``` ``` Map<String, String> getEncryptHeaderNew(); 返回加密的随机字符串与时间戳,需要将该部分添加到https请求的头部中。(所有请求都必须添加) ``` ### 使用方法 ### 使用https协议请求接口 ``` OkHttpClient.Builder clientBuilder = new OkHttpClient().newBuilder(); if (SSLHelper.needSSL) { clientBuilder.sslSocketFactory(SSLHelper.getSSLSocketFactory(getApplicationContext())); clientBuilder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } OkHttpClient client = clientBuilder.build(); Request.Builder builder = new Request.Builder().url(url); TMEncryptBean tmEncryptBean = new TMEncryptBeanNew(); //添加头部 Map<String, String> encryptHeader = tmEncryptBean.getEncryptHeader(); Set<String> keys = encryptHeader.keySet(); for (String key : keys) { builder.addHeader(key, encryptHeader.get(key)); } FormBody formBody = new FormBody.Builder().add("code", "1234").build(); builder.post(formBody); //生成请求 Request request = builder.build(); ... ``` 使用https协议获取图片: 若组件使用Glide来加载图片,无需做特殊处理,框架已经处理,若使用其他图片库加载,则需要添加认证,具体不同框架实现各不相同,主要调用getSSLSocketFactory方法获取认证信息。 加载Web页面: 需要重写WebViewClient的shouldInterceptRequest方法,若使用框架自带的TMWebActivity或TMWebFragment则无需修改,若使用其他webview加载页面,则需要修改。修改样例代码如下 ``` public class DemoWebviewClient extends WebViewClient { @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { if (SSLHelper.needSSL) { try { URL url = new URL(request.getUrl().toString()); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(SSLHelper.getSSLSocketFactory(view.getContext())); urlConnection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); InputStream is = urlConnection.getInputStream(); String contentType = urlConnection.getContentType(); String encoding = urlConnection.getContentEncoding(); if (contentType != null) { String mimeType = contentType; if (contentType.contains(";")) { mimeType = contentType.split(";")[0].trim(); } return new WebResourceResponse(mimeType, encoding, is); } } catch (Exception e) { e.printStackTrace(); } } return super.shouldInterceptRequest(view, request); } } ```