有两种方法请求参数,一种是信任所有https的请求,一种是带证书的验证并请求
不要忘记写联网权限和写入SD卡的权限
之后在MainActivity类中的onCreate()方法里面写
如果是带证书的验证,需要在main文件下创建asstes,然后将ca证书复制到里面。
首先写bean类,之后需要写拦截器,这个类可以直接复制
public class LogInterceptor implements Interceptor { public static String TAG = "LogInterceptor"; @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); long startTime = System.currentTimeMillis(); Response response = chain.proceed(chain.request()); long endTime = System.currentTimeMillis(); long duration=endTime-startTime; MediaType mediaType = response.body().contentType(); String content = response.body().string(); Log.d(TAG,"\n"); Log.d(TAG,"----------Start----------------"); Log.d(TAG, "| "+request.toString()); String method=request.method(); if("POST".equals(method)){ StringBuilder sb = new StringBuilder(); if (request.body() instanceof FormBody) { FormBody body = (FormBody) request.body(); for (int i = 0; i < body.size(); i++) { sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ","); } sb.delete(sb.length() - 1, sb.length()); Log.d(TAG, "| RequestParams:{"+sb.toString()+"}"); } } Log.d(TAG, "| Response:" + content); Log.d(TAG,"----------End:"+duration+"毫秒----------"); return response.newBuilder() .body(ResponseBody.create(mediaType, content)) .build(); } }
不要忘记写联网权限和写入SD卡的权限
之后在MainActivity类中的onCreate()方法里面写
// loadData();//信任所有https的请求:第一种实现 cardData();//带证书验证在方法外面写这两个方法,缺啥补啥,已经注释了,这是两种方法来请求数据。一定要看清注解
/** * 带证书验证 */ private void cardData() { FormBody formbody = new FormBody.Builder().add("mobile", "13717830672").add("password", "123456").build(); Request request = new Request.Builder().url("https://www.zhaoapi.cn/user/login").post(formbody).build(); //带证书验证里的方法 setCard().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful() && response != null && response.body() != null){ final String result; try { result = response.body().string(); Gson gson = new Gson(); Bean bean = gson.fromJson(result, Bean.class); Bean.DataBean data = bean.getData(); String mobile = data.getMobile(); System.out.println("登录的手机号mobile = " + mobile); }catch (Exception e){ } } } }); } //带证书验证里的方法 public OkHttpClient setCard() { OkHttpClient.Builder builder = new OkHttpClient.Builder(); try { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null); String certificateAlias = Integer.toString(0); keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(getAssets().open("zhaoapi_server.cer")));//拷贝好的证书 SSLContext sslContext = SSLContext.getInstance("TLS"); final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); sslContext.init ( null, trustManagerFactory.getTrustManagers(), new SecureRandom() ); builder.sslSocketFactory(sslContext.getSocketFactory()); builder.addInterceptor(new LogInterceptor());//拦截器 builder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; } }); } catch (Exception e) { e.printStackTrace(); } return builder.build(); } /** * 信任所有https的请求:第一种实现 */ private void loadData() { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new LogInterceptor())//拦截器 .sslSocketFactory(createSSLSocketFactory()).hostnameVerifier(new TrustAllHostnameVerifier()) .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .retryOnConnectionFailure(false) .build(); FormBody formbody = new FormBody.Builder().add("mobile", "13717830672").add("password", "123456").build(); Request request = new Request.Builder().url("https://120.27.23.105/user/login").post(formbody).build(); httpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful() && response != null && response.body() != null){ final String result; try { result = response.body().string(); Gson gson = new Gson(); Bean bean = gson.fromJson(result, Bean.class); Bean.DataBean data = bean.getData(); String mobile = data.getMobile(); System.out.println("登录的手机号mobile = " + mobile); }catch (Exception e){ } } } }); } //信任所有https的请求的方法 private static SSLSocketFactory createSSLSocketFactory() { SSLSocketFactory ssfFactory = null; try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom()); ssfFactory = sc.getSocketFactory(); } catch (Exception e) { } return ssfFactory; } //信任所有https的请求的方法 private static class TrustAllCerts implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } //信任所有https的请求的方法 private static class TrustAllHostnameVerifier implements HostnameVerifier { @Override public boolean verify(String hostname, SSLSession session) { return true; } }
如果是带证书的验证,需要在main文件下创建asstes,然后将ca证书复制到里面。