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

news2024/12/28 4:23:36

目录

    • 一、引入依赖包
    • 二、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);
        }
    }
    
  • 测试输出结果

    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

书生·浦语大模型实战营-学习笔记2

目录 轻松玩转书生浦语大模型趣味Demo1. 大模型及 InternLM 模型介绍2. InternLM-Chat-7B 智能対话 Demo3. Lagent 智能体工具调用 Demo4. 浦语•灵笔图文创作理解 Demo5. 通用环境配置实验记录6. 课后作业 视频地址&#xff1a; (2)轻松玩转书生浦语大模型趣味Demo 文档教程&a…

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能&#xff1a;注册用户可已查看电影场次评价选座订票退票&#xff0c;影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序&#xff1a; https://www.bilibili.com/video/BV11W4y1A7mK/?shar…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换&#xff0c;注意括号2.宏的优缺点 优点&#xff1a; 1.增强代码的复用性 2.宏函数不用建立栈帧&#xff0c;提高性能 缺点&#xff1a; 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…

一起学习python类的属性装饰器@property

之前文章我们介绍了class的一些通用功能&#xff0c;比如类属性/类方法/实例属性/实例方法等&#xff0c;之前的属性可以直接修改和访问&#xff08;设置私有属性&#xff0c;不能直接访问,可通过对象名._[类名][属性名]的方式访问&#xff09;&#xff0c;没有一些权限的控制逻…

Linux第24步_安装windows下的VisualStudioCode软件

Visual Stuio Code是一个编辑器&#xff0c;简称 为 VSCode&#xff0c;它是微软出的一款免费编辑器。 VSCode有 Windows、 Linux和 macOS三个版本的&#xff0c;是一个跨平台的编辑器。VSCodeUserSetup-x64-1.50.1是Windows系统中的VSCode软件&#xff0c;而“code_1.50.1-160…

大创项目推荐 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

212. 单词搜索 II(字典树的另一种类型)

大致思路是&#xff1a; 根据words列表建立字典树&#xff0c;其中注意在单词末尾&#xff0c;将原来的isEnd变量换成存储这个单词的变量&#xff0c;方便存储到ans中&#xff0c;另外&#xff0c;字典树的字节点由原来的Trie数组变为hashmap&#xff0c;方便检索字母。 建立…

React之自定义路由组件

开篇 react router功能很强大&#xff0c;可以根据路径配置对应容器组件。做到组件的局部刷新&#xff0c;接下来我会基于react实现一个简单的路由组件。 代码 自定义路由组件 import {useEffect, useState} from "react"; import React from react // 路由配置 e…

(超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

1、在yolov5/models下面新建一个SE.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def __…

软件测试|使用Python打印五子棋棋盘

简介 五子棋是我们传统的益智类游戏&#xff0c;在制作五子棋时&#xff0c;我们需要先将棋盘打印出来&#xff0c;本文就来介绍一下使用Python打印五子棋棋盘。 步骤一&#xff1a;打印空棋盘 首先&#xff0c;我们需要在Python中定义一个棋盘函数&#xff0c;该函数将打印…

Confluence跨大版本升级记录

初始版本7.4.18最终升级到了目前的最新版本8.7.1&#xff0c;在升级过程中遇到了很多问题&#xff0c;庆幸的是最后都解决了&#xff0c;记录一下。 背景 初始环境&#xff1a; OS&#xff1a;CentOS8.5 DB&#xff1a;10.8.8-MariaDB Confluence&#xff1a;7.4.18 公司…

数据驱动下的LLM优化:如何从数据集中发掘最大价值?

来源&#xff0c;公众号&#xff1a;芝士AI吃鱼 本文聚焦于通过使用精心策划的数据集对LLM进行微调&#xff0c;以提升其建模性能。具体来说&#xff0c;本文强调了涉及修改、使用或操纵数据集进行基于指令的微调的策略&#xff0c;而不是改变模型架构或训练算法。本文还将解释…

STL源码阅读总结从小白到大神:vector

一、vector概述 vector的数据格式与array非常相似&#xff0c;两者的差别在于空间的灵活运用&#xff0c;array是静态空间&#xff0c;一旦配置内存空间就不容易更改原来的空间大小。而vector是动态空间&#xff0c;随着元素的加入&#xff0c;它的内部机制就会自动扩容以容纳…

【LeetCode:200. 岛屿数量 | DFS 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

JavaEE中的Controller的每一个Handler如何确定返回值与形参?

在JavaEE中&#xff0c;特别是在基于Spring框架的JavaEE应用中&#xff0c;Controller是用来处理HTTP请求的组件。Controller中的每一个Handler方法都是负责处理特定的请求&#xff0c;并确定返回值与形参。以下是一般情况下的Handler方法的确定返回值与形参的详细说明&#xf…

电子雨代码-html

电子雨代码 动画效果展示 代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Code</title><style>body {margin: 0;overflow: hidden;}</style></head><body><ca…

鸿蒙Harmony--状态管理器--@Prop详解

纵横千里独行客&#xff0c;何惧前路雨潇潇。夜半浊酒慰寂寞&#xff0c;天明走马入红尘。且将新火试新茶&#xff0c;诗酒趁年华。青春以末&#xff0c;壮志照旧&#xff0c;生活以悟&#xff0c;前路未明。时间善变&#xff0c;可执着翻不了篇。时光磨我少年心&#xff0c;却…

c++学习第九讲---类和对象---多态

多态&#xff1a; 1.多态的基本概念&#xff1a; &#xff08;1&#xff09;多态分为两类&#xff1a; 静态多态&#xff1a;函数重载和运算符重载&#xff1b; 动态多态&#xff1a;派生类和虚函数实现运行时多态。 &#xff08;2&#xff09;静态多态和动态多态的区别&am…

动态规划day03

343. 整数拆分(第二次做还是没弄明白) 力扣题目链接(opens new window) 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: …

了解特权身份管理(PIM)的基础知识

要了解特权身份&#xff0c;首先必须确定身份是什么&#xff0c;管理员可用于验证属于网络的用户的真实性的任何形式的唯一身份验证都是身份&#xff0c;这些包括密码、用户名、员工 ID、手机号码、安全答案等。 这些身份通常存储在 Active Directory 等目录中&#xff0c;并使…