调用服务工具类-HttpsUtil

2023-11-13

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.commons.lang3.StringUtils;



public class HttpsUtil
{
    /**
     * post请求方法
     */
    private static final String METHOD_POST = "POST";

    /**
     * utf-8编码格式
     */
    private static final String DEFAULT_CHARSET = "utf-8";

    /**
     * doPost
     * 
     * @param url
     *            请求地址
     * @param params
     *            请求参数
     * @param charset
     *            编码
     * @param ctype
     *            类型
     * @param connectTimeout
     *            连接超时时间
     * @param readTimeout
     *            读取超时时间
     * @return 结果
     * @throws Exception
     *             异常
     */
    public static String doPost(String url, String params, String charset, String ctype,
                                int connectTimeout, int readTimeout)
        throws Exception
    {
        charset = (charset == null || "".equals(charset)) ? DEFAULT_CHARSET : charset;
        byte[] content = {};
        if (params != null)
        {
            content = params.getBytes(charset);
        }
        return doPost(url, ctype, content, connectTimeout, readTimeout);
    }

    /**
     * doPost
     * 
     * @param url
     *            请求地址
     * @param ctype
     *            类型
     * @param content
     *            内容
     * @param connectTimeout
     *            连接超时时间
     * @param readTimeout
     *            读取超时时间
     * @return 结果
     * @throws Exception
     *             异常
     */
    public static String doPost(String url, String ctype, byte[] content, int connectTimeout,
                                int readTimeout)
        throws Exception
    {
        HttpsURLConnection conn = null;
        OutputStream out = null;
        String rsp = null;
        try
        {
            try
            {
                SSLContext ctx = SSLContext.getInstance("TLS");
                ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()},
                    new SecureRandom());
                SSLContext.setDefault(ctx);

                conn = getConnection(new URL(url), METHOD_POST, ctype);
                conn.setHostnameVerifier(new HostnameVerifier()
                {
                    @Override
                    public boolean verify(String hostname, SSLSession session)
                    {
                        return true;
                    }
                });
                conn.setConnectTimeout(connectTimeout);
                conn.setReadTimeout(readTimeout);
            }
            catch (Exception e)
            {
                // log.error("GET_CONNECTOIN_ERROR, URL = " + url, e);
                throw e;
            }
            try
            {
                out = conn.getOutputStream();
                out.write(content);
                rsp = getResponseAsString(conn);
            }
            catch (IOException e)
            {
                // log.error("REQUEST_RESPONSE_ERROR, URL = " + url, e);
                throw e;
            }

        }
        finally
        {
            if (out != null)
            {
                out.close();
            }
            if (conn != null)
            {
                conn.disconnect();
            }
        }

        return rsp;
    }

    private static class DefaultTrustManager implements X509TrustManager
    {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException
        {}

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException
        {}

        @Override
        public X509Certificate[] getAcceptedIssuers()
        {
            return null;
        }

    }

    /**
     * 获取连接
     * 
     * @param url
     *            请求地址
     * @param method
     *            请求方法
     * @param ctype
     *            类型
     * @return HttpsURLConnection
     * @throws IOException
     *             异常
     */
    private static HttpsURLConnection getConnection(URL url, String method, String ctype)
        throws IOException
    {
        HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
        conn.setRequestMethod(method);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestProperty("Accept", "text/xml,text/javascript,text/html");
        conn.setRequestProperty("User-Agent", "stargate");
        conn.setRequestProperty("Content-Type", ctype);
        return conn;
    }

    /**
     * getResponseAsString
     * 
     * @param conn
     *            conn连接
     * @return String
     * @throws IOException
     *             IOException
     */
    protected static String getResponseAsString(HttpURLConnection conn)
        throws IOException
    {
        String charset = getResponseCharset(conn.getContentType());
        InputStream es = conn.getErrorStream();
        if (es == null)
        {
            return getStreamAsString(conn.getInputStream(), charset);
        }
        else
        {
            String msg = getStreamAsString(es, charset);
            if (StringUtils.isEmpty(msg))
            {
                throw new IOException(conn.getResponseCode() + ":" + conn.getResponseMessage());
            }
            else
            {
                throw new IOException(msg);
            }
        }
    }

    /**
     * getStreamAsString
     * 
     * @param stream
     *            stream
     * @param charset
     *            charset
     * @return String
     * @throws IOException
     *             IOException
     */
    private static String getStreamAsString(InputStream stream, String charset)
        throws IOException
    {
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset));
            StringWriter writer = new StringWriter();

            char[] chars = new char[256];
            int count = 0;
            while ((count = reader.read(chars)) > 0)
            {
                writer.write(chars, 0, count);
            }

            return writer.toString();
        }
        finally
        {
            if (stream != null)
            {
                stream.close();
            }
        }
    }

    /**
     * getResponseCharset
     * 
     * @param ctype
     *            ctype
     * @return String
     */
    private static String getResponseCharset(String ctype)
    {
        String charset = DEFAULT_CHARSET;

        if (!StringUtils.isEmpty(ctype))
        {
            String[] params = ctype.split(";");
            for (String param : params)
            {
                param = param.trim();
                if (param.startsWith("charset"))
                {
                    String[] pair = param.split("=", 2);
                    if (pair.length == 2)
                    {
                        if (!StringUtils.isEmpty(pair[1]))
                        {
                            charset = pair[1].trim();
                        }
                    }
                    break;
                }
            }
        }
        return charset;
    }

    private static class TrustAnyHostnameVerifier implements HostnameVerifier
    {
        @Override
        public boolean verify(String hostname, SSLSession session)
        {
            return true;
        }
    }

    /**
     * doGet
     * 
     * @param url
     *            请求地址
     * @param keyValueParams
     *            参数
     * @param cypt
     *            cypt
     * @return String
     * @throws Exception
     *             Exception
     */
    public static String doGet(String url, Map<String, String> keyValueParams, String cypt)
        throws Exception
    {
        String result = "";
        BufferedReader in = null;
        try
        {

            String urlStr = url + "?" + getParamStr(keyValueParams);
            // System.out.println("GET请求的URL为:"+urlStr);
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] {new DefaultTrustManager()},
                new java.security.SecureRandom());
            URL realUrl = new URL(urlStr);
            // 打开和URL之间的连接
            HttpsURLConnection connection = (HttpsURLConnection)realUrl.openConnection();
            // 设置https相关属性
            connection.setSSLSocketFactory(sc.getSocketFactory());
            connection.setHostnameVerifier(new TrustAnyHostnameVerifier());
            connection.setDoOutput(true);

            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("Content-type", cypt);
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();

            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null)
            {
                result += line;
            }
            // System.out.println("获取的结果为:"+result);
        }
        catch (Exception e)
        {
            // System.out.println("发送GET请求出现异常!" + e);
            // e.printStackTrace();
            throw e;
        }
        // 使用finally块来关闭输入流
        finally
        {
            try
            {
                if (in != null)
                {
                    in.close();
                }
            }
            catch (Exception e2)
            {
                // e2.printStackTrace();
                throw e2;
            }
        }
        return result;
    }

    /**
     * 转化字符串参数
     * 
     * @param params
     *            参数
     * @return String
     */
    public static String getParamStr(Map<String, String> params)
    {
        String paramStr = StringUtils.EMPTY;
        if (null == params || 0 == params.size())
        {
            return paramStr;
        }
        // 获取参数列表组成参数字符串
        for (String key : params.keySet())
        {
            paramStr += key + "=" + params.get(key) + "&";
        }
        // 去除最后一个"&"
        return paramStr.substring(0, paramStr.length() - 1);
    }

    /**
     * 解析出url参数中的键值对 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
     * 
     * @param url
     *            url地址
     * @return url请求参数部分
     * @author lzf
     */
    public static Map<String, String> getUrlParam(String url)
    {
        // 初始化返回
        Map<String, String> params = new HashMap<String, String>();
        if (StringUtils.isBlank(url))
        {
            return params;
        }
        //
        String strUrlParam = truncateUrl(url);
        if (StringUtils.isBlank(strUrlParam))
        {
            return params;
        }
        String[] arrSplit = strUrlParam.split("[&]");
        for (String strSplit : arrSplit)
        {
            String[] arrSplitEqual = strSplit.split("[=]");
            // 解析出键值
            if (arrSplitEqual.length > 1)
            {
                // 正确解析
                params.put(arrSplitEqual[0], arrSplitEqual[1]);
            }
            else
            {
                if (!"".equals(arrSplitEqual[0]))
                {
                    // 只有参数没有值,也加入
                    params.put(arrSplitEqual[0], "");
                }
            }
        }
        return params;
    }

    /**
     * 去掉url中的路径,留下请求参数部分
     * 
     * @param url
     *            url地址
     * @return url
     * @author lzf
     */
    private static String truncateUrl(String url)
    {
        String strAllParam = null;
        String[] arrSplit = null;
        url = url.trim();
        arrSplit = url.split("[?]");
        if (url.length() > 1)
        {
            if (arrSplit.length > 1)
            {
                for (int i = 1; i < arrSplit.length; i++ )
                {
                    strAllParam = arrSplit[i];
                }
            }
        }
        return strAllParam;
    }

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

调用服务工具类-HttpsUtil 的相关文章

  • java中的泛型

    泛型 分为三种分别是泛型类 泛型方法 泛型接口 一 泛型类 直接在类名后面加上
  • 用C++流的方式读写文件

    一 代码 include
  • 【XSS漏洞-03】XSS漏洞语句构造和绕过方法实例

    目录 1 XSS语句构造方式 1 1 第一种 利用 lt gt 构造HTML JS语句 1 2 第二种 利用javascript 伪协议 1 3 第三种 事件驱动 1 4 第四种 利用CSS 层叠样式脚本 1 5 其他标签及手法 2 XSS
  • NFC模块方案,轻松实现NFC通讯

    一 主要特点 用户只需通过Uart串口控制就能实现NFC设备间数据传输 不需要了解NFC底层协议 迅速完成产品开发 二 支持平台 WinXP Win7 Win8 Win10 Linux Android 等等 三 NFC通讯控制模式 1 手机
  • decimal返回给前端是数字类型而不是字符串

    bigDecimal长度太长 返回给前端 精度会丢失 即后几位都会变成0 解决办法 给前端返回字符串类型 加注解 JsonSerialize using ToStringSerializer class 如果有些字段不要返回给前端呢 比如删
  • 循环神经网络学习笔记(基础篇)

    循环神经网络 RNN 基础篇学习笔记 一 权重共享 在CNN全连接层权重占比较多 在图像任务中 由于整个图像共享卷积核 所以实际参数量远远小于全连接层 在实际任务中 由于全连接层参数过多 我们需要使用RNN解决带有序列模式的数据 同时利用权
  • 各种排序方法的比较

    各种排序方法的比较 排序方法有很多 它们各有优缺点 没有绝对最好的和最坏的排序方法 只有最符合某个使用场景的方法 在选用排序方法的时候 我们应该综合考虑以下方面 1 时间复杂度 2 空间复杂度 3 稳定性 4 算法简单性 5 待排序记录个数
  • vscode 缩略图

    vscode 缩略图 缩略图的打开与关闭 快捷键 Ctrl Shift P 输入 minimap回车 每次为开启关闭交替 大段代码缩略图可以快速移动 分屏时关闭缩略图更好看
  • mysql复制数据表

    CREATE TABLE newtable LIKE oldtable INSERT newtable SELECT FROM oldtable
  • 解决问题记录4:kettle数据库连接报错时区问题

    问题 Connection failed Verify all connection parameters and confirm that the appropriate driver is installed The server ti
  • FastCGI介绍

    CGI Common Gateway Interface 公共网关接口 是HTTP服务器与其他程序通信的工具 FastCGI是一个long live型的CGI 支持分布式计算 它将CGI解释器进程保持在内存中并因此获得较高的性能 FastC
  • 多模态深度学习

    我们对世界的体验是多模态的 我们看到物体 听到声音 感受质地 闻到气味 然后做出决定 多模态学习表明 当我们的许多感官 视觉 听觉 动觉 参与信息处理时 我们理解和记忆更多 通过组合这些模态 学习者可以组合来自不同来源的信息 多模态深度学习
  • Yoga 14s电脑亮度不能调节?教你一招一下搞定。

    说一下背景 本人电脑联想yoga 14s 不知道最近那一天突然发现电脑亮度没法调节 写小论文时眼睛都要被刺瞎了 试了重装驱动 无果 升级系统 无果 最后河海大学的好朋友问了客服 客服一针见血问出 是否装过向日葵等远程软件 果然 我装了向日葵
  • 使用Python,matplotlib绘制复杂曲线,并求其交点,y=-sin(x)-x-1并求解函数的值

    写这篇博客源于博友的提问 将介绍如何使用Python matplotlib绘制复杂曲线 并求其交点 y sin x x 1并求解函数的值 1 效果图 y sin x 效果图如下 y x ln x 效果图如下 y sin x x 1 y 0
  • 线段树(java)

    线段树描述 线段树是一种二叉搜索树 与区间树相似 它将一个区间划分成一些单元区间 每个单元区间对应线段树中的一个叶结点 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数 时间复杂度为O logN 而未优化的空间复杂度为2N 实际应
  • 使用File类读取文件夹中所有文件

    在平时使用图形化界面操作计算机时 可以很方便的区分各种文件 并进行操作 但对于编程而言 需要通过一些方法才能实现区分或列出文件 在Java编程中 有一个对文件操作的类叫做File类 File类的一个对象代表一个文件或者文件夹 并且File类
  • android内存优化面试题,写给Android软件工程师的3条建议

    我的移动开发春季历程 没有稳定的工作 只有稳定的能力 春天 又到了万物复苏的季节 在程序猿这个行当里 作为 Android 开发出生的我 在经历了5年的脱发生涯后 现在更多的是称呼自己为移动开发攻城狮 Java面试题 1 GC机制 垃圾回收
  • 【使用ip地址进入百度】

    ping一下百度的地址 C Users CaiWeiTong gt ping www baidu com 正在 Ping www baidu com 36 152 44 95 具有 32 字节的数据 来自 36 152 44 95 的回复
  • ElementUI浅尝辄止21:Tree 树形控件

    树形组件 用清晰的层级结构展示信息 可展开或折叠 树组件使用挺频繁的 常见于侧边栏树形目录 树形下拉选项按钮或搜索查询树形信息选项 1 如何使用 基础的树形结构展示
  • 每天五分钟机器学习:使用主成分分析法PCA算法的注意事项

    本文重点 PCA算法能够降维数据 这会给我们带来一些好处 本节课程我们将学习一下 在应用PCA算法时的一些建议 PCA算法可以提高算法的运行 如果数据集维度特别大 10000维 算法运行的会比较慢 我们使用PCA算法能够有效的降低数据的维度

随机推荐

  • maven打包报错-There are test failures

    如果工程中有测试程序 需要检查测试程序的包名与主程序的包名是否一致 解决方法 将包名修改为一致的包名 如果修改后无效 则先执行一下clean命令 在执行package 修改在测试程序的注解中指定主测试类 如果出现 Failed to cle
  • Qt在linux下安装时报错:cannot execute binary file

    最近由于项目需要 得把原来的产品升级为Qt5 之前用的都是Qt4 所以学习了一下Qt5 在windows平台下安装qtcreator时很顺利 但是在ubuntu下安装时遇到了问题 具体表现是在Qt官网https download qt io
  • 【深入理解Linux内核】【分页】相关函数或宏

    PAGE SHIFT PMD SHIFT PUDSHIFT PGDIR SHIFT 指定offset字段位数 指定offset和table总位数 确定页上级目录能够映射的区域大小 确定页全局目录能够映射的区域大小 PTRS PER PTE
  • 第二讲:网线的制作方法及步骤

    这几年 网络搭建与应用 专业技能大赛所需网线需要参赛学生自己制作 所以今天讲讲网线的制作方法及步骤 所要原料 双绞线 RJ45水晶头 所需工具 双绞线压线钳 双绞线测试仪 在制作网线之前 我们先来了解双绞线的连接方法 双绞线的连接方法有两种
  • windows下redis 和 hiredis的编译与使用

    转 http www cnblogs com raker p 4368741 html 果然 高端的程序员真心是鸟都不鸟windows的 redis的客户端找了一圈愣是没有C 的windows版本 我要做个windows上的C 的服务器都没
  • ubuntu安装SSH2

    apt get install libssh2 1 dev libssh2 php service apache2 restart 安装完成之后 可以使用SCP远程复制文件 connection ssh2 connect 192 168 1
  • 读取本地文件到读出p.node涉及的函数

    这里是读取本地文件的所调用的函数 func ParseNode rawurl string Node error if m incompleteNodeURL FindStringSubmatch rawurl m nil id err H
  • 【学习笔记】多模态综述

    多模态综述 前言 1 CLIP ViLT 2 ALBEF 3 VLMO 4 BLIP 5 CoCa 6 BeiTv3 总结 参考链接 前言 本篇学习笔记虽然是多模态综述 本质上是对ViLT后多模态模型的总结 时间线为2021年至2022年
  • Linux文件描述符和重定向

    文件描述符 0 stdin 标准输入 1 stdout 标准输出 2 stderr 标准错误 成功和不成功的命令 student myhost ls ls cannot access No such file or directory st
  • STM32定时器

    目录 一 定时器的基本介绍 二 定时器的原理框图 1 定时器时钟 2 时基单元 3 捕获输入 4 PWM输出 三 定时器的应用 1 定时器的基础定时计数功能 2 PWM比较输出 3 外部脉冲计数 a 外部触发输入 ETR 外部时钟模式2 b
  • 617. 合并二叉树(c++)

    暴力解 当t1为空返回t2 当t2为空返回t1 当t1 t2都有值 new新节点为两个节点的和 新节点左子树为原始节点左子树合并 新节点右子树为原始节点右子树合并 Definition for a binary tree node stru
  • stm32 /*TIM定时器使用

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一部分 定时器定时计数功能 一 定时器RCC内部时钟初始化配置 二 定时时间的计算 试验现象 晶振原理 1s时间计算 1min时间计算 制作时钟读数表 试验现象 试
  • leetcode刷题(四)——概率论与数理统计(一)

    leetcode刷题系列四 主要的内容涉及概率论和数理统计的知识 例题 算法分析 int dp 12 70 double dicesProbability int n int returnSize int i j k double f do
  • ubuntu安装及深度学习框架(CUDA、cuDNN、Anaconda、pytorch、pycharm)

    文章目录 前言 一 安装ubuntu20 04 4 1 准备工作 2 开始安装 二 安装英伟达驱动 方案一 不推荐 1 下载NVIDIA驱动 2 安装GCC 3 卸载原有NVIDIA驱动 一般都没有 4 禁用通用驱动 三 安装英伟达驱动 方
  • 上位机与欧姆龙PLC的Fins tcp通讯

    参考1 147条消息 欧姆龙PLC的FinsTCP协议 weixin 37700863的博客 CSDN博客 欧姆龙fins协议tcp 参考2 147条消息 FinsTCP协议报文详细分析 常哥说编程的博客 CSDN博客 fins协议 参考3
  • 在R语言中利用mice包进行缺失值的线性回归填补

    在数据分析中 我们会经常遇到缺失值问题 一般的缺失值的处理方法有删除法和填补法 通过删除法 我们可以删除缺失数据的样本或者变量 而缺失值填补法又可分为单变量填补法和多变量填补法 其中单变量填补法又可分为随机填补法 中位数 中值填补法 回归填
  • 常见http状态码详解

    状态码 类别 原因短语 1XX Informational 信息性状态码 接受的请求正在处理 2XX Success 成功状态码 请求正常处理完毕 3XX Redirection 重定向状态码 需要进行附加操作以完成请求 4XX Clien
  • 架构总结图

  • 斑马网络和荣威RX5深度研究

    锋影 email 174176320 qq com 佐智汽车就李想的观点访谈了两位业内专家 他们的回答如下 专家A 这个是需求推动 有需求就有人做 特斯拉用Linux一样有地图 Android过于复杂 可靠性问题比Linux大几个数量级 做
  • 调用服务工具类-HttpsUtil

    import java io BufferedReader import java io IOException import java io InputStream import java io InputStreamReader imp