java通过okhttp方式实现https请求的工具类(绕过证书验证)

目录

一、引入依赖包

  • 引入相关依赖包

    java 复制代码
    <!--okhttp依赖包-->
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.10.0</version>
    </dependency>
    <!--lombok用于简化实体类开发-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

二、okhttp方式实现的https请求工具类

2.1、跳过证书配置类

  • 跳过证书配置类代码

    java 复制代码
    package com.xz.https;
    import okhttp3.OkHttpClient;
    
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * @Description 跳过证书配置类
     * @author xz
     */
    public class OKHttpClientBuilder {
        public static OkHttpClient.Builder buildOKHttpClient() {
            try {
                TrustManager[] trustAllCerts = buildTrustManagers();
                final SSLContext sslContext = SSLContext.getInstance("SSL");
                sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
    
                final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
                OkHttpClient.Builder builder = new OkHttpClient.Builder();
                builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
                builder.hostnameVerifier((hostname, session) -> true);
                return builder;
            } catch (NoSuchAlgorithmException | KeyManagementException e) {
                e.printStackTrace();
                return new OkHttpClient.Builder();
            }
        }
    
        private static TrustManager[] buildTrustManagers() {
            return new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }
    
                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }
    
                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };
        }
    }

2.2、okhttp方式的 https工具类

  • okhttp方式的 https工具类代码

    java 复制代码
    package com.xz.https;
    
    import lombok.extern.slf4j.Slf4j;
    import okhttp3.*;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Map;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @Description okhttp方式的 https工具类
     * @author xz
     */
    @Slf4j
    public class OkhttpsUtils {
    
        /**
         * 获取客户端链接
         */
        private static OkHttpClient getClient() {
            OkHttpClient okHttpClient = OKHttpClientBuilder.buildOKHttpClient().
                    connectTimeout(5000, TimeUnit.SECONDS).
                    readTimeout(20000, TimeUnit.SECONDS).
                    writeTimeout(20000, TimeUnit.SECONDS).
                    build();
            return okHttpClient;
        }
    
    
    
        private static Request getRequest(String url, Map<String,String> header) throws MalformedURLException {
            Request.Builder builder = getBuilder(header);
            URL uri = new URL(url);
            return builder.url(uri).build();
        }
    
        private static Request.Builder getBuilder(Map<String,String> header) {
            Request.Builder builder = new Request.Builder();
    
            builder.addHeader("accept", "application/json").
                    addHeader("connection", "Keep-Alive").
                    addHeader("Content-Type", "application/json;charset=UTF-8");
            if(header != null && header.entrySet().size()>0){
                for(Map.Entry<String,String>  entry:header.entrySet()){
                    builder.addHeader(entry.getKey(),entry.getValue());
                }
            }
            return builder;
        }
    
        /**
         * doGet请求
         */
        public static String doGet(String url, String param, Map<String,String> header) {
            if (param != null) {
                url = url + "?" + param;
            }
    
            String result = null;
            try {
                OkHttpClient okHttpClient = getClient();
                Request request = getRequest(url,header);
                Response response = okHttpClient.newCall(request).execute();
                if (response.isSuccessful()) {
                    ResponseBody body = response.body();
                    if (body != null) {
                        result = body.string();
                    } else {
                        throw new IOException("response body is null");
                    }
                } else {
                    response.close();
                }
            } catch (IOException e) {
                log.error("GET请求异常,url = {}", url, e);
            }
            return result;
        }
    
        /**
         * doPost请求
         */
        public static String doPost(String url, String param,Map<String,String> header) {
    
            OkHttpClient okHttpClient = getClient();
            Request.Builder builder = getBuilder(header);
            String result = null;
            try {
                RequestBody requestBody = RequestBody.create(param.getBytes("UTF-8"),
                        MediaType.parse(org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE));
                builder.post(requestBody);
                Request request = builder.url(url).build();
                Response response = okHttpClient.newCall(request).execute();
                if (response.isSuccessful()) {
                    ResponseBody body = response.body();
                    if (body != null) {
                        result = body.string();
                    } else {
                        throw new IOException("response body is null");
                    }
                } else {
                    response.close();
                }
            } catch (Exception e) {
                log.error("POST请求异常,url = {}", url, e);
            }
            return result;
        }
    
        /**
         * doDelete请求
         */
        public static String doDelete(String url, String param,Map<String,String> header) {
    
            OkHttpClient okHttpClient = getClient();
            Request.Builder builder = getBuilder(header);
            String result = null;
            try {
                if (param != null) {
                    RequestBody requestBody = RequestBody.create(param.getBytes("UTF-8"),
                            MediaType.parse(org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE));
                    builder.delete(requestBody);
                } else {
                    builder.delete();
                }
                Request request = builder.url(url).build();
                Response response = okHttpClient.newCall(request).execute();
                if (response.isSuccessful()) {
                    ResponseBody body = response.body();
                    if (body != null) {
                        result = body.string();
                    } else {
                        throw new IOException("response body is null");
                    }
                } else {
                    response.close();
                }
            } catch (Exception e) {
                log.error("DELETE请求异常,url = {}", url, e);
            }
            return result;
        }
    
        /**
         * doPut请求
         */
        public static String doPut(String url, String param,Map<String,String> header) {
            OkHttpClient okHttpClient = getClient();
            Request.Builder builder = getBuilder(header);
            String result = null;
            try {
                RequestBody requestBody = RequestBody.create(param.getBytes("UTF-8"),
                        MediaType.parse(org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE));
                builder.put(requestBody);
                Request request = builder.url(url).build();
                Response response = okHttpClient.newCall(request).execute();
    
                if (response.isSuccessful()) {
                    ResponseBody body = response.body();
                    if (body != null) {
                        result = body.string();
                    } else {
                        throw new IOException("response body is null");
                    }
                } else {
                    response.close();
                }
            } catch (Exception e) {
                log.error("PUT请求异常,url = {}", url, e);
            }
            return result;
        }
    
    }

三、测试类

  • 测试代码

    java 复制代码
    package com.xz.https;
    
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * @author: xz
     * @since: 2024/1/11 22:07
     * @description:
     */
    public class HttpsUtilsTest {
        public static void main(String[] args) throws Exception {
            String url="https://xxx.com.cn:5678/gateway/user/service/getxxxx";
            UserReq userReq = new UserReq ();
            userReq .setName("张三");
            String result = OkhttpsUtils.doPost(url, JSONObject.toJSONString(accessTokenReq), null);
            System.out.println("Okhttps---https请求:"+result);
        }
    }
  • 测试输出结果

相关推荐
书中自有妍如玉8 分钟前
.net 使用MQTT订阅消息
java·前端·.net
风铃儿~33 分钟前
Spring AI 入门:Java 开发者的生成式 AI 实践之路
java·人工智能·spring
斯普信专业组39 分钟前
Tomcat全方位监控实施方案指南
java·tomcat
忆雾屿1 小时前
云原生时代 Kafka 深度实践:06原理剖析与源码解读
java·后端·云原生·kafka
武昌库里写JAVA1 小时前
iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
java·开发语言·spring boot·学习·课程设计
gaoliheng0061 小时前
Redis看门狗机制
java·数据库·redis
我是唐青枫1 小时前
.NET AOT 详解
java·服务器·.net
Su米苏2 小时前
Axios请求超时重发机制
java
本郡主是喵3 小时前
并发编程 - go版
java·服务器·开发语言