zoukankan      html  css  js  c++  java
  • OkHttpClient跳过证书验证

    package com.example.test.utils;
    
    import javax.net.ssl.*;
    import java.security.KeyStore;
    import java.security.SecureRandom;
    import java.security.cert.X509Certificate;
    import java.util.Arrays;
    
    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
         * */
        private static TrustManager[] getTrustManager() {
            return 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[]{};
                        }
                    }
            };
        }
    
        /**
         * 获取HostnameVerifier
         * */
        public static HostnameVerifier getHostnameVerifier() {
            return (s, sslSession) -> true;
        }
    
        public static X509TrustManager getX509TrustManager() {
            X509TrustManager trustManager = null;
            try {
                TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                trustManagerFactory.init((KeyStore) null);
                TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
                if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                    throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
                }
                trustManager = (X509TrustManager) trustManagers[0];
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return trustManager;
        }
    
    }

    调用

    public static HashMap httpPost(String url, HashMap<String, Object> data, String token) throws IOException {
            HashMap<String, Object> result = new HashMap<>();
            if ("".equals(url)) {
                return result;
            }
            OkHttpClient client = new OkHttpClient.Builder()
                    .readTimeout(60, TimeUnit.SECONDS)
                    .connectTimeout(60, TimeUnit.SECONDS)
                    .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager())
                    .hostnameVerifier(SSLSocketClient.getHostnameVerifier())
                    .build();
    
            MediaType mediaType = MediaType.parse("application/json;charset=utf8");
            RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(data));
            Request request = new Request.Builder()
                    .url(url)
                    .post(body)
                    .addHeader("content-type", "application/json")
                    .addHeader("X-Auth-Token", token)
                    .build();
            Response response = client.newCall(request).execute();
            String responseData = response.body().string();
            String getToken = response.header("X-Subject-Token");
            HashMap res = JSON.parseObject(responseData, HashMap.class);
            result.put("token", getToken);
            result.put("res", res);
            return result;
        }
  • 相关阅读:
    堆排序实现
    Unable to convert MySQL date/time value to System.DateTime
    想想那些除了技术之外重要的事情
    js小功能
    01输入框回车触发操作
    javascript闭包
    BQ27510 电量计的校准 的 C语言实现
    嵌入式Linux开发教程:Linux常见命令(上篇)
    技术团队的情绪与效率
    如何有效使用Project(2)——进度计划的执行与监控
  • 原文地址:https://www.cnblogs.com/todarcy/p/15104125.html
Copyright © 2011-2022 走看看