JAVA实现HTTPS协议POST请求JSON报文

2023-05-16

HTTPS和HTTP的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是 超文本传输协议,信息是明文传输,https 则是具有 安全性的 ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的 网络协议,比http协议安全。
package https;
import java.io.ByteArrayOutputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.net.URL;  
import java.security.KeyManagementException;  
import java.security.NoSuchAlgorithmException;  
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  
  




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


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
  
public class PostJson {  
  
    private static class TrustAnyTrustManager implements X509TrustManager {  
    //该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。
    //JSSE中,默认的信任管理器类为TrustManager。
        public void checkClientTrusted(X509Certificate[] chain, String authType)  
                throws CertificateException {  
        }  
        //该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
        public void checkServerTrusted(X509Certificate[] chain, String authType)  
                throws CertificateException {  
        }  
        //返回受信任的X509证书数组。
        public X509Certificate[] getAcceptedIssuers() {  
            return new X509Certificate[] {};  
        }  
    }  
  
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {  
        public boolean verify(String hostname, SSLSession session) {  
            return true;  
        }  
    }  
  
    /** 
     * post方式请求服务器(https协议) 
     *  
     * @param url 
     *            请求地址 
     * @param content 
     *            参数 
     * @param charset 
     *            编码 
     * @return 
     * @throws NoSuchAlgorithmException 
     * @throws KeyManagementException 
     * @throws IOException 
     */  
    public static byte[] post(String url, String content, String charset)  
            throws NoSuchAlgorithmException, KeyManagementException,  
            IOException {  
    /*类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
    * HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。
    * SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。
    * */
        SSLContext sc = SSLContext.getInstance("SSL");  
        sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },  
                new java.security.SecureRandom());  
  
        URL console = new URL(url);  
        HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();  
        conn.setSSLSocketFactory(sc.getSocketFactory());  
        conn.setHostnameVerifier(new TrustAnyHostnameVerifier());  
        conn.setDoOutput(true); 
        //设置请求头
        conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
        conn.connect();  
        DataOutputStream out = new DataOutputStream(conn.getOutputStream());  
        out.write(content.getBytes(charset));  
        // 刷新、关闭  
        out.flush();  
        out.close();  
        InputStream is = conn.getInputStream();  
        if (is != null) {  
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
            byte[] buffer = new byte[1024];  
            int len = 0;  
            while ((len = is.read(buffer)) != -1) {  
                outStream.write(buffer, 0, len);  
            }  
            is.close();  
            return outStream.toByteArray();  
        }  
        return null;  
    } 
    public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, IOException{
    String url = "https://xxx.xxx.xxx/path/to/dir/${action}";
    PostJson pj = new PostJson();
    String content=pj.getbaowen();
    String charset="UTF-8";
   
    byte[] a = pj.post(url, content, charset);
    String b = new String(a);
    System.out.println(b);
   
    }
    //构造嵌套的JSON报文方式,即在new一个JSONObject,并返回报文字符串
    public  String getbaowen(){
    JSONObject test= new JSONObject();
    test.put("xxxx", "");
    String resp= null;
        JSONObject obj = new JSONObject();
        obj.put("xxxxxx", "");   
        obj.put("test", test);
        
        
        
       


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

JAVA实现HTTPS协议POST请求JSON报文 的相关文章

随机推荐

  • 模仿标准库函数,利用UART_IT_RXNE和UART_IT_IDLE两个标志,写了一个hal库串口接收的程序,只用到在中断写

    突然间发现 xff0c 原来的标准库的程序 xff0c 改成hal库 xff0c 把hal库里的一些规则 形式掌握好 xff0c 只需要做一些小的改动即可 这里是串口2的接收中断的代码 xff0c 用串口1实现这个功能 xff0c 修改一下
  • RTK+GPS提高定位精度原理解析(一个小白写给另一个小白系列)

    目录 GPS定位原理回顾 RTK基本概念 RTK组成 RTK传输差分示意 RTK数据链接 坐标转换 RTK应用 后记 我们在上一篇文章导航定位系统的原理解析 xff08 一个小白写给另一个小白 xff09 中跟大家介绍了GPS定位的基本原理
  • 项目管理风险把控:三点估算法

    施工时间划分为乐观时间 最可能时间 悲观时间 乐观时间 也就是工作顺利情况下的时间为a 最可能时间 最可能时间 xff0c 就是完成某道工序的最可能完成时间m 悲观时间 最悲观的时间就是工作进行不利所用时间b 活动历时均值 或估计值 61
  • Git中 fork, clone,branch之前的区别你真的都了解了吗

    一 是什么 fork fork xff0c 英语翻译过来就是叉子 xff0c 动词形式则是分叉 xff0c 如下图 xff0c 从左到右 xff0c 一条直线变成多条直线 转到git仓库中 xff0c fork则可以代表分叉 克隆 出一个
  • 进入计算机专业学习的一些体会和思考以及今后的学习规划

    一 前言 这篇文章 xff0c 我分享了刚刚进入计算机专业学习的一些体会和思考以及今后的学习规划 xff0c 今后计划在CSDN进行学习上的反馈 xff0c 欢迎大家一起交流 xff0c 有大佬看到多多指教 x1f64f 二 体会与思考 在
  • ▲什么是类?类有什么作用?

    目录 一 什么是类 xff1f 二 类与对象是什么关系 xff1f 三 类和结构体有什么区别呢 xff1f 四 如何创建一个类 五 如何创建一个类的对象 1 对象的创建 2 创建对象的初始化 1 默认构造函数 2 普通构造函数 3 复制构造
  • 【STL】vector容器如何使用?

    文章目录 前言vector的理解vector的成员类型vector的创建vector的迭代器vector的容量vector元素访问vector的元素修改 前言 上篇博客简述了string类 xff0c 实际上就是一个用来装字符的容器 xff
  • 2022/4/9-蓝桥杯C++B组题解-G题-积木画

    宽为1 1种 xff1e a 1 61 1 宽为2 2种 xff1e a 2 61 2 宽为3 先排最左边2列 种数a 2 避免重复情况下 xff0c 排最右边1列 钟数1 这个情况种数a 2 1 61 2 先排最左边1列 种数a 1 避免
  • 动态规划算法

    一 前言 动态规划是一种常用的算法 xff0c 在算法领域十分重要 xff0c 但对于新手来说 xff0c 理解起来有一定的挑战性 xff0c 这篇博客将明确步骤来一步一步讲解动态规划到底该如何理解与运用 二 解析动态规划算法 1 特点 把
  • 常见背包问题

    一 前言 若你想学习或正在学习动态规划 xff0c 背包问题一定是你需要了解的一种题型 xff0c 并且大多数人最初都是从背包问题入坑进而打开动态规划这一大门 背包问题分为多种 xff0c 你可以先掌握最常见的主要是三类 xff1a 01背
  • 如何配置ublox ZED-F9P 高精度模块+Ntrip DTU 网络电台(连接千寻/CORS/自建站)实现网络RTK定位

    格林恩德F9P RTK模块 xff0c 集成高精度板卡 ZED F9P 可同时接收GPS 北斗 xff0c GALILEO GLONASS 卫星系统的L1 L2频点 xff0c 结合高精度天线一体化设计 xff0c 体积小 xff0c 重量
  • 快速入手优先队列

    一 理解优先队列 标准模板库 xff08 Standard Template Library STL C 43 43 功能强大 xff0c 为开发者提供了标准模板库 xff0c 其中封装了很多实用的容器 容器可以理解成能够实现很多功能的系统
  • dfs和bfs能解决的问题

    一 理解暴力穷举之dfs和bfs 暴力穷举 暴力穷举是在解决问题中最常用的手段 xff0c 而dfs和bfs算法则是这个手段的两个非常重要的工具 其实 xff0c 最简单的穷举法是直接遍历 xff0c 如数列求和 xff0c 遍历一个数组即
  • C语言中给指定的内存地址赋值(通过指针)

    应用中的实际问题 xff1a 通过I2C接口发送到MCU一个地址数据 xff08 unsigned char AdData xff0c 一个待写入数据 xff08 unsigned char DaData 希望将DaData的值写到MCU内
  • ubuntu 14.04+indigo环境下dashgo d1+lms100运行环境搭建建图

    1 设置用户的串口读取权限 sudo usermod a G dialout your user name your user name替换为实际用户名 2 安装ROS依赖包 sudo sh c 39 echo 34 deb http pa
  • L298N双路驱动直流电机方案(支持PWM+正反转)

    目录 写在前面 xff08 吐槽吐槽 xff09 正文 最后 写在前面 xff08 吐槽吐槽 xff09 我想要驱动两个直流电机 直流电机 xff0c 说白了 xff0c 就是那种小马达 xff0c 小时候玩四驱车时那种没有正负极的马达 x
  • 基于业务测试的增量代码覆盖率实现

    前言 xff1a 本文主要实现的功能是代码增量覆盖率 xff0c 且基于覆盖率已实现 xff0c 可拿到全量覆盖率结果的情况下 xff0c 给出的增量代码覆盖率方法实现 xff0c 虽然各类语言有差别 xff0c 但是实现的基本思路都是一致
  • 测试工程师进阶测试开发工程师

    黑盒测试 xff1a 没有开发基础的测试工程师通常由黑盒测试做起 xff0c 不过根据个人经验 xff0c 这部分工作依然会给我们带来很多经验性的东西 xff0c 比如熟悉浏览器特性 xff0c 熟悉公司业务流程 xff0c 业务知识 xf
  • 轻量级接口自动化测试工具

    相信所有公司在起步自动化的时候做的都是接口自动化 xff0c 为什么呢 xff1f 理由很简单 xff0c 接口自动化复用性强 xff0c 易维护 xff0c 他的产出效率要远远高于UI自动化 xff0c 想想如果你的公司有成百上千的接口
  • JAVA实现HTTPS协议POST请求JSON报文

    HTTPS和HTTP的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息 HTTP协议以明文方式发送内容 xff0c 不提供任何方式的数据加密 xff0c 如果攻击者截取了Web浏览器和网站服务器之间的传输报文 x