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);
        }
    }
  • 测试输出结果

相关推荐
一定要AK1 分钟前
JVM 全体系深度解析笔记
java·jvm·笔记
coder阿龙2 分钟前
基于SpringAI+Qdrant+Ollama本地模型和向量数据库开发问答和RAG检索
java·数据库·spring boot·ai·数据库开发
Gofarlic_OMS2 分钟前
HyperWorks用户仿真行为分析与许可证资源分点配置
java·大数据·运维·服务器·人工智能
徒 花9 分钟前
Python知识学习08
java·python·算法
Lyyaoo.10 分钟前
【JAVA基础面经】== 和 equals() 的区别
java·开发语言·jvm
lifallen22 分钟前
Flink Agent:RunnerContext 注入与装配演进分析
java·大数据·人工智能·语言模型·flink
爱丽_23 分钟前
Tomcat 从 Socket 到 Servlet:机制主线、参数调优与线上排障(实战)
java·servlet·tomcat
小江的记录本28 分钟前
【JEECG Boot】 JEECG Boot——数据字典管理 系统性知识体系全解析
java·前端·spring boot·后端·spring·spring cloud·mybatis
卖男孩的小火柴.30 分钟前
java内置方法总结及基础算法
java·算法
赫瑞30 分钟前
Java中的日期类
java·开发语言