java通过HTTPS协议POST提交接收JSON格式数据

文章目录

          • 一、客户端实现
            • 1. HttpsApiUtils +测试方法
            • 2. 返回报文监控
          • 二、服务端实现
            • 2.1. 配置SSL 实现HTTPS
            • 2.2. 添加post接口方法
            • 2.3. 服务端监控
          • 三、进阶测试
            • 3.1. 客户端发送对象
            • 3.2. 服务端监控
            • 3.3. 客户端解析返回报文

一、客户端实现

声明:不用引入任何第三方jar包,只需要安装JDK即可,目前版本适配1.6及以上版本

1. HttpsApiUtils +测试方法
package com.gblfy.util;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;/*** 实现HTTPS协议POST请求JSON报文** @author gblfy* @date 2020-06-19*/public class HttpsApiUtil {private static class TrustAnyTrustManager implements X509TrustManager {// 该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。// JSSE中,默认的信任管理器类为TrustManager。@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}/** 该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。* 在实现该方法时,也可以简单的不做任何处理, 即一个空的函数体,由于不会抛出异常,它就会信任任何证书。(non-Javadoc)*/@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}// 返回受信任的X509证书数组。@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}}private static class TrustAnyHostnameVerifier implements HostnameVerifier {@Overridepublic 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[] sendJsonToHttpsPost(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 NoSuchAlgorithmException, KeyManagementException, IOException {String url = "https://127.0.0.1:8888/postToJson";byte[] bytes = sendJsonToHttpsPost(url, "{\"name\":\"ly\"}", "utf-8");System.out.println("响应报文:"+new String(bytes));}
}
2. 返回报文监控

在这里插入图片描述

解析

通过上述方式可以得到收发方法post()。传入字符串,返回字节数组。

传入的字符串处理:

JSONObject rspObj = new JSONObject();
rspObj.put("arg1", "aaa");
rspObj.put("arg2", "bbb");
//...
String reqStr = rspObj.toString();
System.out.println("请求json:\n" + reqStr);

返回的字节数组转字符串:

byte[] result = post(reqUrl,reqStr,"utf-8");
if(result != null){String rspStr = new String(result);System.out.println("响应json:\n" + rspStr);
}
二、服务端实现
2.1. 配置SSL 实现HTTPS

Spring Boot 配置SSL 实现HTTPS

2.2. 添加post接口方法
package com.gblfy.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping
public class ViewControlller {@RequestMapping(value = "/postToJson", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")@ResponseBodypublic String postToJson(@RequestBody String json) {System.out.println("https服务端接收到报文:" + json);return json;}
}
2.3. 服务端监控

在这里插入图片描述

三、进阶测试
3.1. 客户端发送对象
package com.gblfy.pojo;import java.io.Serializable;public class User implements Serializable {private String username;private Integer age;private String passwd;public User(String username, Integer age, String passwd) {this.username = username;this.age = age;this.passwd = passwd;}public User() {}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}
}
 public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, IOException, JSONException {//1. 模拟对象发送User user = new User();user.setUsername("gblfy");user.setAge(28);user.setPasswd("123456");//2. 配置发送urlString url = "https://127.0.0.1:8888/postToJson";//3.发送前将对象转json处理JSONObject jsonObject = new JSONObject(user);String reqXml = jsonObject.toString();//4.向指定url发送json格式的https协议报文byte[] bytes = sendJsonToHttpsPost(url, reqXml, "utf-8");//5.对返回的报文解析String resXml = new String(bytes);JSONObject jsonObj = new JSONObject(resXml);//6.从解析的报文中获取指定的值System.out.println("服务端返回报文:" + jsonObj.getString("username"));System.out.println("服务端返回报文:" + jsonObj.getInt("age"));System.out.println("服务端返回报文:" + jsonObj.getString("passwd"));}
3.2. 服务端监控
https服务端接收到报文:{"passwd":"123456","age":28,"username":"gblfy"}

在这里插入图片描述

3.3. 客户端解析返回报文
服务端返回报文:gblfy
服务端返回报文:28
服务端返回报文:123456

在这里插入图片描述

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

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

相关文章

2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)

4、工具和库 工具和库是数据科学家的基础。我参与了大量关于哪种工具最好的辩论,哪个框架会取代另一个,哪个库是经济计算的缩影等等。 但有一点共识--我们需要掌握该领域的最新工具,否则就有被淘汰的风险。 Python取代其他所有事物并将自己…

Elasticsearch7.15.2 出现 node validation exception 的问题处理

3个异常如下: [1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536][2]: memory locking requested for elasticsearch process but memory is not locked[3]: max virtual memory areas vm.max_map_count [6553…

最强NLP模型BERT可视化学习

2018年是自然语言处理(Natural Language Processing, NLP)领域的转折点,一系列深度学习模型在智能问答及情感分类等NLP任务中均取得了最先进的成果。近期,谷歌提出了BERT模型,在各种任务上表现卓越,有人称其…

一分钟看懂通信铁塔

戳蓝字“CSDN云计算”关注我们哦!作者 | 无线深海责编 | 阿秃说到铁塔,相信大家都很熟悉。我们走在路上,到处都可以看到它们。作为通信工程师来说,我们所说的铁塔,往往是特指那些专门用于通信用途的塔。现实生活中&…

html立体魔方图片制作,ppt怎么制作三维视图的魔方图 ppt制作三维魔方图详细教程...

很多用户在制作PPT展示图的时候,有时候需要制作三维立体的魔方图,制作步骤简单,不过还有很多的用户不清楚如何制作,那么下面小编就为大家分享PPT制作三维魔方图的详细步骤教程,不会制作的朋友可以参照下面的步骤教程多…

PMP考试技巧(必备)

(一) 关键词篇 第 1 章 引论 看到“驱动变革”——选项中找“将来状态” 看到“依赖关系”——选项中找“项目集管理” 看到“价值最大化”——选项中找“项目组合管理” 看到“可行性研究”——选项中找“商业论证” 第 2 章 项目运行环境 看到“…

IDE 插件新版本发布,开发效率 “biu” 起来了

近日,Cloud Toolkit正式推出了面向 IntelliJ 和 Eclipse 两个平台的新款插件,本文挑选了其中三个重大特性进行解读,点击文末官网跳转链接,可查看详细的版本说明。 本地应用一键部署到任何机器上IDE 内置的命令行终端文件上传到服…

爬取6271家死亡公司数据,看十年创业公司消亡史

戳蓝字“CSDN云计算”关注我们哦!作者 | 朱小五责编 | 阿秃前段时间老罗和王校长都成为自己的创业公司成了失信人,小五打算上IT桔子看看他们的公司。意外发现IT桔子出了个死亡公司库(https://www.itjuzi.com/deathCompany)&#x…

阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发。 此前,早在2018年9月的杭州云栖大会上,阿里巴巴就公布了这项开源计划。Ma…

html5链接教程,关于html a、html超链接基础教程

一、html a语法被链接内容html a超链接机关图同时锚文本_锚链接又被各人喻为超链接。Href值:网址,网址一定加上http://域名相对路径,如htef"/abc/",代表本站内锚文本target指标值以下:_blank -- 在新窗口中掀开链接 _pa…

阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A类、获得 ACMSIGSOFT “杰出论文奖”。担任 ICSE18NIER、ASE18、…

推出云游戏解决方案后,腾讯在这场沙龙上还说了什么?

近日腾讯在京举办腾讯云媒体开放日,其中在云游戏专场,腾讯研究院研究员俞点和腾讯视频云业务总经理李郁韬分别进行了分享。俞点指出,腾讯从2016年开始便针对云游戏进行技术开发和积累,进入2019年后云游戏迎来爆发,谷歌…

一份关于机器学习端到端学习指南

人工智能、机器学习已经火了有一阵了,很多程序员也想换到这方向,目前有关于深度学习基础介绍的材料很多,但很难找到一篇简洁的文章提供实施机器学习项目端到端的指南,从头到尾整个过程的相关指南介绍。因此,个人在网上…

从NeurIPS 2018看AI发展路线!

去年9月份的时候,我发表过一份技术报告,阐述了我认为人工智能最重要的挑战,大概有以下四个方面: 可伸缩性(Scalability)计算或存储的成本不与神经元的数量成二次方或线性比例的神经网络; 持续…

2亿用户背后的Flutter应用框架Fish Redux

背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也是 Flutter 领域空缺的一块处…

打包上传web html,将webApp打包上传到App Store

将webApp打包上传到Appstore流程:先将html5写好的webApp通过html5编辑器Builder打包为ipa包,打包流程下图image发行为原生安装包后如图所示:image咋们发行的是iOS版本,所以最上面一栏选者iOS,支不支持iPad版本看自己需求&#xff…

国内首家!华为获5G核心网电信设备进网许可证;亚马逊或颠覆博通等芯片制造商?2020年5G总投资额达0.9万亿元……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go goiPhone 12全系渲染图(图片来源网络&am…

老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码

简介 在业务开发的过程中,往往存在平台代码和业务代码耦合严重难以分离、业务和业务之间代码交织缺少拆解的现象。平台和业务代码交织导致不易修改,不同业务的代码交织增加了不同负责团队之间的协同成本。因此不论从代码质量,还是从团队协作…

阿里高级技术专家:研发效能的追求永无止境

背景 大约在5年前,也就是2013年我刚加入阿里的时候,那个时候 DevOps 的风刚吹起来没多久,有家公司宣称能够一天发布几十上百次,这意味着相比传统软件公司几周一次的发布来说,他们响应商业需求的能力可以甩后者几条街&…

就因为一个笔记本,运营和产品吵得不可开交......

上班最讨厌的一件事情,莫过于开会,因为每次开会感觉就要吵架,这个今天开会又吵架了,吵架竟然是因为产品小姐姐的笔记本。产品小姐姐用了一本可擦笔记本记录会议内容,运营小姐姐竟然说这个本子有什么用,不就…