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

目录

    • 一、引入依赖包
    • 二、okhttp方式实现的https请求工具类
      • 2.1、跳过证书配置类
      • 2.2、okhttp方式的 https工具类
    • 三、测试类

一、引入依赖包

  • 引入相关依赖包

    <!--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、跳过证书配置类

  • 跳过证书配置类代码

    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工具类代码

    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;
        }
    
    }
    
    
    

三、测试类

  • 测试代码

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

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++标准学习--tuple

以下帖子介绍的比较详细&#xff1a; C的 tuple_c tuple-CSDN博客 tuple 是 C11 新标准里的类型&#xff0c;它是一个类似 pair 类型的模板。tuple 是一个固定大小的不同类型值的集合&#xff0c;是泛化的 std::pair。我们也可以把它当做一个通用的结构体来用&#xff0c;不需…

Electron中调用dll

截止目前Electron的官方稳定版本已经更新到了28.1.1。我在创建Electron项目时用的28.0.0版本&#xff0c;后面在项目中有用到调用dll方法的需求&#xff0c;大致的实现就是将后端给的dll文件引入到项目中&#xff0c;安装ffi-napi依赖&#xff0c;然后进行使用。但是在Electron…

js逆向第16例:猿人学第12题入门级js

文章目录 一、前言二、定位关键参数三、代码实现一、前言 任务:抓取这5页的数字,计算加和并提交结果 既然是入门级,那肯定很简单了 二、定位关键参数 控制台查看请求数据,m值应该就是关键参数了 进入堆栈 马上定位到了m值"m": btoa(yuanrenxue + window.pag…

【scala】编译build报错 “xxx is not an enclosing class“

private[sources] val creationTimeMs: Long {val session SparkSession.getActiveSession.orElse(SparkSession.getDefaultSession)require(session.isDefined)private[xxx]是访问权限控制在xxxx包的意思。 解决办法&#xff1a; 把[sources]删掉&#xff0c;或者改成和包名…

Element|Upload结合Progress实现上传展示进度条

背景 &#xff1a; 项目里的 附件上传 题型组件&#xff0c;用户在上传过程中&#xff0c;如果文件较大&#xff0c;上传过程较慢&#xff0c;而又没有一个类似 Loading... 的加载过程的话&#xff0c;会显得干愣愣的&#xff0c;用户体验较差&#xff0c;所以需要添加一个进度…

JDBC初体验(二)——增、删、改、查

本课目标 理解SQL注入的概念 掌握 PreparedStatement 接口的使用 熟练使用JDBC完成数据库的增、删、改、查操作 SQL注入 注入原理&#xff1a;利用现有应用程序&#xff0c;将&#xff08;恶意的&#xff09;SQL命令注入到后台数据库引擎执行能力&#xff0c;它可以通过在…

[C#]winform部署PaddleOCRV3推理模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介绍】 PaddleOCR是由百度公司推出的一款开源光学字符识别&#xff08;OCR&#xff09;工具&#xff0c;它基于深度学习框架PaddlePaddle开发。这款工具提供了一整套端到端的文字检测和识别解决方案&a…

灵魂三连问:是5G卡吗?支持5G吗?是5G套餐吗

关于5G的问题&#xff0c;小伙伴们的疑问是不是很多&#xff0c;它和4G到底有什么区别呢&#xff1f;什么是5G卡&#xff1f;什么是5G套餐&#xff1f;支持5G吗&#xff1f;什么是5G基站&#xff1f;我想大家现在一定是晕的&#xff0c;下面小编来给大家解惑&#xff01; 1&…

MySQL中datetime和timestamp的区别

datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…

Redis Zset类型

Redis Zset类型 Zset&#xff08;有序集合&#xff09;它是集合的一种&#xff0c;不仅可以保存元素&#xff0c;还可以为每个元素关联一个 double 类型的分数&#xff08;score&#xff09;&#xff0c;Redis 正是通过分数来为集合中的元素进行从小到大的排序。在 Zset 中&am…

1.11.。。。

1 有道云笔记 2 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QW…

STL之vector

目录 vector的定义和特性 vector的定义和结构非常简单&#xff0c;它由以下几个重要的部分组成&#xff1a; vector的常用函数 vector排序去重 排序 去重 代码示例 vector的定义和特性 在c中&#xff0c;vector是一个动态数组容器&#xff0c;可以存储一系列相同类型的…

【Docker】Linux中Docker技术入门与实战及实用的常规命令

目录 一、引言 1. 说明&#xff1a; 2. Linux介绍 3. Docker简介 二、Docker三要素 1. 镜像&#xff08;Image&#xff09; 2. 容器&#xff08;Container&#xff09; 3. 仓库&#xff08;Repository&#xff09; 三、实现案例 1. 创建 2. 设置镜像 3. 开启设置 …

基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 编码与初始化 4.2 适应度函数 4.3 遗传操作 4.4 自适应机制 4.5 终止条件 5.完整程序 1.程序功能描述 基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘…

【AI】搭建Windows Linux子系统(WSL2)CUDA环境

0.准备工作 Windows本机安装CUDA Driver 首先去下载页面下载驱动文件 点击Get CUDA Driver进入下载页面&#xff0c;我看下载页面跟普通驱动下载页面相同&#xff0c;感觉应该不是单独的驱动&#xff0c;只要之前显卡已经安装好了CUDA的驱动&#xff0c;就可以先省略这一步。…

4024A/B/C/D/E/F/G/H/L频谱分析仪

01 4024A/B/C/D/E/F/G/H/L频谱分析仪 产品综述&#xff1a; 4024频谱分析仪系列产品具有工作频段宽、性能指标高、扫描速度快、测试功能多、操作简便等多重优点&#xff0c;性能指标方面具有优良的平均噪声电平、相位噪声以及扫描速度&#xff0c;测量功能方面具有频谱分析、…

NetSuite 收入管理模块与总账的数据一致性检查

收入管理模块是NetSuite的一个艰深功能领域&#xff0c;能够有所实践&#xff0c;知原理懂变化的实施顾问少之又少。很高兴&#xff0c;我们的财务顾问Chris在23年底经历了一次深入的NetSuite收入管理模块的实践&#xff0c;对收入管理模块与总账递延收入和收入数据的一致性检查…

MySQL中order by是怎么工作的?

在如上图中所示的explain的执行结果中&#xff0c;Extra字段中的“Using filesort”表示的就是需要排序&#xff0c;MySQL会给每个线程分配一块内存用于排序&#xff0c;称为sort_buffer。 索引city如上图所示 上述语句的执行流程如下&#xff1a; 1、初始化sort_buffer&…

由于找不到msvcp140.dll无法继续执行代码原因及解决教程分享

在计算机打开软件过程&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到msvcp140.dll无法继续执行代码”。这个错误通常发生在使用Microsoft Visual C 2015或更高版本编译的程序运行时。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;为什么会…

竞赛保研 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…