Android之okhttp基本使用和okhttp发送https请求安全认证
参考:https://blog.csdn.net/bencheng06/article/details/78520979
1、新TrustAllcert类实现X509TrustManager接口:
import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class TrustAllCerts implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) {} @Override public void checkServerTrusted(X509Certificate[] chain, String authType) {} @Override public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];} }
2、初始化OKHttpClient配置
OkHttpClient okHttpClient = null; OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(timeout, TimeUnit.SECONDS);//响应时间 builder.readTimeout(timeout, TimeUnit.SECONDS);//读取时间 // 信任https证书 builder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); //创建管理器 TrustAllCerts trustAllCerts = new TrustAllCerts(); try { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{trustAllCerts}, new SecureRandom()); //为OkHttpClient设置sslSocketFactory builder.sslSocketFactory(sslContext.getSocketFactory(), trustAllCerts); okHttpClient = builder.build(); } catch (Exception e) { e.printStackTrace(); }
得到的okHttpClient,信任所有的https。
使用,build.gradle中配置 implementation("com.squareup.okhttp3:okhttp:3.12.1")
发送请求示例:
public String postJsonSync(String url, String json, Map<String,String> requestHeaderMap, Integer timeout) throws Exception { try { String data = json; Headers headers = null; okhttp3.Headers.Builder headersbuilder = new okhttp3.Headers.Builder(); if(requestHeaderMap != null && requestHeaderMap.size() >0){ for (String key:requestHeaderMap.keySet()){ headersbuilder.add(key, requestHeaderMap.get(key)); } } headers = headersbuilder.build(); RequestBody body = RequestBody.create(JSON, data); Request request; request = new Request.Builder() .url(url) .headers(headers) .post(body) .build(); OkHttpClient okHttpClient = getOkHttpClient(timeout); Response response = okHttpClient.newCall(request).execute(); String rets = response.body().string();return rets; }catch (Exception ex){throw ex; } }
getOkHttpClient(timeOut)就是最上面获取okHttpClient的代码。