通过HttpClient以post方式发送https/http请求,请求及返回参数格式为json和xml两种方式,解决https加ip直接访问的ssl签名认证问题

2023-11-12

          最近项目中需要向外部服务发送https请求,但是外部服务测试环境提供的访问地址为https加ip、端口的访问方式,由于SSL签名认证问题(网上搜索大多说是因为https后面设计为跟域名绑定访问),无法访问,后来尝试网上各大神的解决方案,完美解决该问题。将代码保存下来,以备不时之需。

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;

/**
 * @param :
 * @author :     mym
 * @version :    V1.0
 * @date :       2019/07/16 17:25
 * @describe :   发送http请求
 * @return :
 */
public class HttpClientUtil {
    /* *
    * @author :     mym
    * @date Date :  2019/7/20 11:16
    * @version :    V1.0
    * @describe :   https发送json格式的请求  出参、入参都是json串
    * @param :      
    * @return :     
    */
    public static String doJsonPost(String url,String jsonstr,String charset){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new SSLClient();
            httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "application/json");
            StringEntity se = new StringEntity(jsonstr,charset);
            se.setContentType("text/json");
            se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
            httpPost.setEntity(se);
            HttpResponse response = httpClient.execute(httpPost);
            if(response != null){
                HttpEntity resEntity = response.getEntity();
                if(resEntity != null){
                    result = EntityUtils.toString(resEntity,charset);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return result;
    }
    /* *
    * @author :     mym
    * @date Date :  2019/7/20 11:17
    * @version :    V1.0
    * @describe :   http发送xml格式的请求  出参、入参都是xml
    * @param :
    * @return :
    */
    public static String doXmlPost(String url,String xml,String charset){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new SSLClient();
            httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "application/xml");
            StringEntity se = new StringEntity(xml,charset);
            se.setContentType("text/xml");
            se.setContentEncoding(new BasicHeader("Content-Type", "application/xml"));
            httpPost.setEntity(se);
            HttpResponse response = httpClient.execute(httpPost);
            if(response != null){
                HttpEntity resEntity = response.getEntity();
                if(resEntity != null){
                    result = EntityUtils.toString(resEntity,charset);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return result;
    }
}

 

 

import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * @param :
 * @author :     mym
 * @version :    V1.0
 * @date :       2019/07/16 17:21
 * @describe :   信任https 签名
 * @return :
 */
public class SSLClient extends DefaultHttpClient {
    public SSLClient() throws Exception{
        super();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}

 

需要的maven依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.5</version>
</dependency>

 

码字不易,转载请注明出处!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过HttpClient以post方式发送https/http请求,请求及返回参数格式为json和xml两种方式,解决https加ip直接访问的ssl签名认证问题 的相关文章

  • (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】

    Linux 进程 和 线程 的基本 编程 通讯 和 例程 注 杂记 系列为日常网搜资料的堆砌而积累成之 如有错误恭谢指出 标识为 原创 其实不完全是 只是多引用再整理和加上自己的理解 进行记录备查 大都引自网络 侵删 大量参考 100ask
  • Yarn基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 Yarn架构 Yarn集群有一个ResourceManager 每台
  • 基于vue实现钉钉审批流程(仿)

    做项目有个需求 实现审批流程 看了钉钉审批流感觉功能很强大 模仿其实现审批效果 效果图 没有找到windows录制视频转gif的软件 所以只能放一张静图了 有好的软件欢迎各位积极分享 代码位置 整个流程上传至github https git
  • 数据库字段为什么要使用NOT NULL

    目录 1 对程序的影响 2 对查询结果的影响 2 1 聚合函数count 不准确 2 1 与 失效 2 3 NULL与其他值运算结果为NULL 2 4 对distinct group by order by等排序结果的影响 3 对索引的影响
  • html文本延迟加载,LazyLoad 延迟加载(按需加载)

    1 实际需求 大型网站往往很矛盾 想用户在首页看到更多东西 又不想浪费太多服务器流量 比如一个有3屏的首页 可能50 的用户进首页的目的是点击首页的连接 到子页面 那么我们的网站却为100 的用户加载了 3个 屏幕的所有内容 如果可以按需加
  • HIT-ICS2019大作业-程序人生-Hello’s P2P

    HIT ICS2019大作业 程序人生 Hello s P2P 摘 要 本文以一个简单的C程序hello c为楔子描绘了从预处理一直到I O管理的计算机的内部原理 将计算机对程序的处理过程生动地展现在人们眼前 关键词 hello 程序 P2
  • 1157:哥德巴赫猜想(C C++)

    题目描述 哥德巴赫猜想的命题之一是 大于6 的偶数等于两个素数之和 编程将6 100所有偶数表示成两个素数之和 输入 无 输出 分行输出 例如 6 3 3 8 3 5 每个数只拆开一次 请保证第一个加数最小 输入样例 无 输出样例 无 代码
  • Simulink 学习(一)

    一 基本操作 Simulink多用于仿真 分为模块 输入 输出 matlab中 有两种方法打开 第一种就如图所示 第二种直接在命令窗口输入 simulink 模块库 例如 常量倍数放大利用Math Oprations中的Gain模块 双击可
  • koa-view架构分析

    根据后端的模板引擎渲染到模板上 如ejs 安装 npm install koa views save registry https registry npm taobao org 安装ejs npm install ejs save reg
  • Gin框架使用Casbin进行用户权限校验

    以下是测试项目目录 一 配置model conf casbin rbac model conf 请求 request definition r sub obj act sub gt 想要访问资源的用户角色 Subject 请求实体 obj
  • TensorFlow学习笔记2-Anaconda下安装matplotlib的方法

    文章在下述博文的基础上删减 http blog csdn net abvedu article details 54731713 安装好Anaconda后 在Anaconda Prompt下执行conda命令安装matplotlib包 执行
  • JavaScript 宏任务和微任务

    JavaScript 宏观任务和微观任务 概念 宏观任务 宿主发起的任务为宏观任务 如setTimeout setInterval setImmediate I O 微观任务 JavaScript引擎发起的任务为微观任务 如Promise
  • 计算机组成原理——指令系统题库

    指令系统题库 选择题 1 以下有关指令系统的说法中错误的是什么 A 指令系统是一台机器硬件能执行的指令全体 B 任何程序运行前都要先转化为机器语言 C 指令系统是计算机软件 硬件的界面 D 指令系统和机器语言是无关的 2 在CPU执行指令的
  • tip消息定时弹窗功能 核心代码

    for var i 0 i lt 5 i var j 0 var arr 1 2 5 7 8 setTimeout function console log arr j i 3000
  • 深度学习与神经网络笔记

    在正式学习之前 首先清楚一下当前出现了很多次的概念是什么 这些概念之间的关系是什么 人工智能 AI 研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术和应用系统的一门新的技术科学 机器学习 实现人工智能的一种途径 以机器学习为手段解决
  • 《现代C++教程》笔记(2)

    2 语言可用性的强化 2 1 常量 nullptr 问题 C 不允许直接将 void 隐式转换到其他类型 但如果编译器尝试把 NULL 定义为 void 0 那么在下面这句代码中 char ch NULL 没有了 void 隐式转换的 C
  • 处理系统装机后BitLocker锁硬盘问题

    处理系统装机后BitLocker锁硬盘问题 今天重装公司里面的电脑发现装好后系统的D E盘被BitLocker锁住了 然后总结出了以下两种解决方法 可能不是非常详细但是还是希望可以对大家有所帮助 文章目录 处理系统装机后BitLocker锁
  • 总结使用Unity3D优化游戏运行性能的经验

    一 遇到麻烦时要调用 垃圾回收器 Garbage Collector 无用单元收集程序 以下简称GC 由于具有C C 游戏编程背景 我们并不习惯无用单元收集程序的特定行为 确保自动清理你不用的内存 这种做法在刚开始时很好 但很快你就公发现自
  • 2021-06-20

    TIM2 PWM部分初始化 PWM输出初始化 arr 自动重装值 psc 时钟预分频数 void TIM2 PWM Init u16 arr u16 psc GPIO InitTypeDef GPIO InitStructure TIM T

随机推荐

  • Symbol类型详解

    Symbol类型详解 symbol类型通过Symbol函数生成 用于表示独一无二的值 不使用new关键字 直接调用即可创建 例 const s Symbol str 即使使用相同的字符串来创建Symbol类型的值 这些值也是不同的 symb
  • 基于MATLAB GUI的裂缝检测(识别)系统(支持向量机)

    主要内容 本文对裂缝检测技术进行了深入研究 并结合裂缝图像的特征 提出了一种基于传统机器学习和图像处理技术的裂缝检测方法 实现裂缝基本参数的计算和显示 内容如下 1 裂缝图像采集 无人机 2 裂缝图像预处理 3 裂缝分割 提取 裂缝连接 4
  • 【Spring学习03】Spring简单入门实例

    本文博客地址 http blog csdn net soonfly article details 68498742 转载请注明出处 国际惯例 从一个简单的例子入门 轻松了解依赖注入 拿之前提到的场景 假设我们开发了一套管理系统 每收到一笔
  • GPS纠偏算法,适用于google,高德体系的地图

    GPS纠偏算法 适用于google 高德体系的地图 精确度还比较高 我试了一下比高德本身的纠偏还精确点 gps纠偏算法 适用于google 高德体系的地图 author Administrator public class GpsCorre
  • IOS H5 输入框输入后不显示内容,需要失焦后才显示

    input 框输入文本后 还在 focus 的状态 输入的内容显示空白 点击完成失去焦点后内容才出来 解决方案 input 框增加一个样式 transform translateZ 0
  • C++ : 矩阵初等行变换,化成最简矩阵

    化成最简矩阵分成如下步骤 从矩阵的第 i 0 行开始化简 1 寻找最长元素行 从第i行开始 寻找第一个开头行元素非0的行 利用行交换把该行换到矩阵的第i行 2 对第i行进行化简 对第i行的所有元素同除该行的首个非0元素 3 矩阵行化简 从矩
  • linux系统日志查看-停止-继续

    linux系统日志查看 停止 继续 查看日志实时刷新 tail f 文件名 查看显示1000行 tail 1000f 文件名 查看暂停刷新 按键 Ctrl s 查看继续刷新 按键 Ctrl q 查看尾部最后100行 tail n 10 te
  • c语音动态内存分配,内存重新分配,内存释放,指针运算

    c语音基础 中的基础 大神请直接关闭本页面 多谢合作 总结下这学习到的知识点 define CRT SECURE NO WARNINGS include
  • Windows 10快速在指定目录打开命令行

    一 我们在想要到达的目录上按住shift键并点击鼠标右键 看到了吗 这时候在弹出菜单里多了一个选项 就是 在此处打开命令窗口 我们点开看一下 二 不过有时候我们需要以管理员的权限来打开命令行 这时候我们需要自行添加一个脚本 方便操作 你可以
  • 蓝桥杯 排列序数

    标题 排列序数 X星系的某次考古活动发现了史前智能痕迹 这是一些用来计数的符号 经过分析它的计数规律如下 为了表示方便 我们把这些奇怪的符号用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1
  • Elasticsearch分布式全文搜索引擎

    文章目录 一 Elasticsearch 是什么 二 ES安装 1 安装软件 2 启动失败问题解决 三 ES入门 1 数据格式 2 索引 3 文档操作 4 映射操作 5 高级查询 一 Elasticsearch 是什么 Elasticsea
  • 【华为OD机试】最小传输时延I【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 某通信网络中有N个网络结点 用1到N进行标识 网络通过一个有向无环图表示 其中图的边的值表示结点之间的消息传递时延 现给定相连节点之间的时延列表times i u v
  • 114-----JS基础-----事件的委派(实际是利用了事件的冒泡)

    一 代码 不难 事件的委派就是利用了事件的冒泡
  • c语言中的字符数组和字符串之间的关系

    一 字符串的结束标志 1 很多时候我们都是可以看到相关的内容就是 使用数组来存储字符串 也就是我们经常会使用到sizeof 和这个函数 而 这个函数只是求出当前该数组的最大容量 而不是数组中实际存放的内容 我们一般都是需要使用 0 来表示字
  • ERP系统

    ERP系统是企业资源计划 Enterprise Resource Planning 的简称 是指建立在信息技术基础上 集信息技术与先进管理思想于一身 以系统化的管理思想 为企业员工及决策层提供决策手段的管理平台 它是从MRP 物料需求计划
  • linux如何解压.zip文件

    安装zip yum y install unzip zip 1 解压shop zip unzip shop zip 2 将shop文件夹压缩为old shop zip zip old shop zip shop
  • 数据可视化作业-使用RMarkdown撰写实验报告

    US Stock data visualization 研究背景 近年来 M股市场的重要性和影响力不断增加 成为全球投资者关注的焦点之一 美股市场的发展和表现对全球经济和金融市场产生了深远的影响 作为全球最大的股票市场之一 M国股市为投资者
  • centos7开启关闭3306端口

    背景 闲来想着用navicat访问下centos上的数据库 发现连接不上 尴尬 如图 一直在连接 然后报了一个unknown error 解决 1 查看一下防火墙状态 root VM 0 15 centos systemctl status
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——HarryPotter:Nagini

    Vulnhub靶机HarryPotter Nagini渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 漏洞发现 SSRF漏洞利用 网站后台GetShell SSH公
  • 通过HttpClient以post方式发送https/http请求,请求及返回参数格式为json和xml两种方式,解决https加ip直接访问的ssl签名认证问题

    最近项目中需要向外部服务发送https请求 但是外部服务测试环境提供的访问地址为https加ip 端口的访问方式 由于SSL签名认证问题 网上搜索大多说是因为https后面设计为跟域名绑定访问 无法访问 后来尝试网上各大神的解决方案 完美解