http发送jsonn报文get/post请求

文章目录

          • 一、第1种方式
            • 1. 因依赖
            • 2. 工具类+测试方法
            • 3. 服务端接收
          • 二、第2种方式
          • 三、第3种方式
            • 3.1. 引依赖
            • 3.2. 工具类+测试
            • 3.3. 服务端代码

一、第1种方式
1. 因依赖
  <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency>
2. 工具类+测试方法
package com.gblfy;import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;import java.io.InputStream;
import java.io.InputStreamReader;public class HTTPUtils {/*** 协议类型:HTTP* 请求方式:POST* 报文格式:json* 编码设置:UTF-8* 响应类型:jsonStr** @param url* @param json* @return* @throws Exception*/public static String postJosnContent(String url, String json) throws Exception {System.out.println("请求接口参数:" + json);PostMethod method = new PostMethod(url);HttpClient httpClient = new HttpClient();try {RequestEntity entity = new StringRequestEntity(json, "application/json", "UTF-8");method.setRequestEntity(entity);httpClient.executeMethod(method);System.out.println("请求接口路径url:" + method.getURI().toString());InputStream in = method.getResponseBodyAsStream();//下面将stream转换为StringStringBuffer sb = new StringBuffer();InputStreamReader isr = new InputStreamReader(in, "UTF-8");char[] b = new char[4096];for (int n; (n = isr.read(b)) != -1; ) {sb.append(new String(b, 0, n));}String returnStr = sb.toString();return returnStr;} catch (Exception e) {e.printStackTrace();throw e;} finally {method.releaseConnection();}}public static void main(String[] args) throws Exception {String url = "http://localhost:8080/httptojson";String json = "{\"name\":\"gblfy\"}";String res = postJosnContent(url, json);System.out.println("响应报文:" + res);}
}
3. 服务端接收
package com.gblfy;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;@Controller
public class AController {@RequestMapping(value = "/postToJson", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")@ResponseBodypublic String postToJson(@RequestBody String json) {System.out.println(json);return json;}
}
二、第2种方式

和第一种方式基本一样

public static byte[] post(String url, String content, String charset) throws IOException {URL console = new URL(url);HttpURLConnection conn = (HttpURLConnection) console.openConnection();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;}
三、第3种方式
3.1. 引依赖
      <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version></dependency>
3.2. 工具类+测试
package com.gblfy.util;import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.*;/*** @author Mundo* @ClassName: HttpClientUtil* @Description: TODO*/public class HttpApiUtil {private static final Logger logger = LoggerFactory.getLogger(HttpApiUtil.class);/**** @param url 请求路径* @param params 参数* @return*/public static String doGet(String url, Map<String, String> params) {// 返回结果String result = "";// 创建HttpClient对象HttpClient httpClient = HttpClientBuilder.create().build();HttpGet httpGet = null;try {// 拼接参数,可以用URIBuilder,也可以直接拼接在?传值,拼在url后面,如下--httpGet = new// HttpGet(uri+"?id=123");URIBuilder uriBuilder = new URIBuilder(url);if (null != params && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet()) {uriBuilder.addParameter(entry.getKey(), entry.getValue());// 或者用// 顺便说一下不同(setParameter会覆盖同名参数的值,addParameter则不会)// uriBuilder.setParameter(entry.getKey(), entry.getValue());}}URI uri = uriBuilder.build();// 创建get请求httpGet = new HttpGet(uri);logger.info("访问路径:" + uri);HttpResponse response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 返回200,请求成功// 结果返回result = EntityUtils.toString(response.getEntity());logger.info("请求成功!,返回数据:" + result);} else {logger.info("请求失败!");}} catch (Exception e) {logger.info("请求失败!");logger.error(ExceptionUtils.getStackTrace(e));} finally {// 释放连接if (null != httpGet) {httpGet.releaseConnection();}}return result;}/*** @param url* @param params* @return* @Title: doPost* @Description: post请求* @author Mundo*/public static String doPost(String url, Map<String, String> params) {String result = "";// 创建httpclient对象HttpClient httpClient = HttpClientBuilder.create().build();HttpPost httpPost = new HttpPost(url);try { // 参数键值对if (null != params && !params.isEmpty()) {List<NameValuePair> pairs = new ArrayList<NameValuePair>();NameValuePair pair = null;for (String key : params.keySet()) {pair = new BasicNameValuePair(key, params.get(key));pairs.add(pair);}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs);httpPost.setEntity(entity);}HttpResponse response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {result = EntityUtils.toString(response.getEntity(), "utf-8");logger.info("返回数据:>>>" + result);} else {logger.info("请求失败!,url:" + url);}} catch (Exception e) {logger.error("请求失败");logger.error(ExceptionUtils.getStackTrace(e));e.printStackTrace();} finally {if (null != httpPost) {// 释放连接httpPost.releaseConnection();}}return result;}/*** post发送json字符串* @param url* @param params* @return 返回数据* @Title: sendJsonStr*/public static String sendJsonStr(String url, String params) {String result = "";HttpClient httpClient = HttpClientBuilder.create().build();HttpPost httpPost = new HttpPost(url);try {httpPost.addHeader("Content-type", "application/json; charset=utf-8");httpPost.setHeader("Accept", "application/json");if (StringUtils.isNotBlank(params)) {httpPost.setEntity(new StringEntity(params, Charset.forName("UTF-8")));}HttpResponse response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {result = EntityUtils.toString(response.getEntity());logger.info("返回数据:" + result);} else {logger.info("请求失败");}} catch (IOException e) {logger.error("请求异常");logger.error(ExceptionUtils.getStackTrace(e));}return result;}/*** 发送http请求的obj报文(内置转json)** @param url* @param obj* @return*/public static String postJson(String url, Object obj) {HttpURLConnection conn = null;try {// 创建一个URL对象URL mURL = new URL(url);// 调用URL的openConnection()方法,获取HttpURLConnection对象conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("POST");// 设置请求方法为post/* conn.setReadTimeout(5000);// 设置读取超时为5秒conn.setConnectTimeout(10000);// 设置连接网络超时为10秒*/conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容// 设置文件类型:conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");// 设置接收类型否则返回415错误conn.setRequestProperty("accept", "application/json");int len = 0;// post请求的参数byte[] buf = new byte[10240];//String data = JSONObject.toJSONString(obj);// 获得一个输出流,向服务器写数据,默认情况下,系统不允许向服务器输出内容OutputStream out = conn.getOutputStream();// 获得一个输出流,向服务器写数据out.write(data.getBytes());out.flush();out.close();int responseCode = conn.getResponseCode();// 调用此方法就不必再使用conn.connect()方法if (responseCode == 200) {InputStream is = conn.getInputStream();String state = getStringFromInputStream(is);return state;} else {System.out.print("访问失败" + responseCode);}} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {conn.disconnect();// 关闭连接}}return null;}public static String getStringFromInputStream(InputStream is) throws IOException {ByteArrayOutputStream os = new ByteArrayOutputStream();// 模板代码 必须熟练byte[] buffer = new byte[1024];int len = -1;// 一定要写len=is.read(buffer)// 如果while((is.read(buffer))!=-1)则无法将数据写入buffer中while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len);}is.close();String state = os.toString();// 把流中的数据转换成字符串,采用的编码是utf-8(模拟器默认编码)os.close();return state;}/*** post方式请求服务器(http协议)** @param url     请求地址* @param content 参数* @param charset 编码* @return* @throws NoSuchAlgorithmException* @throws KeyManagementException* @throws IOException*/public static byte[] post(String url, String content, String charset) throws IOException {URL console = new URL(url);HttpURLConnection conn = (HttpURLConnection) console.openConnection();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) {//测试1 get发送mapMap<String, String> map = new HashMap<String, String>();map.put("id", UUID.randomUUID().toString());map.put("name", "gblfy");String get = doGet("http://localhost:8080/getToMap", map);System.out.println("get请求调用成功,返回数据是:" + get);//测试2 post发送map// String post = doPost("http://localhost:8080/httptojson", map);// System.out.println("post调用成功,返回数据是:" + post);//测试3 post发送json字符串// String json = sendJsonStr("http://localhost:8080/httptojson", "{\"name\":\"ly\"}");// System.out.println("json发送成功,返回数据是:" + json);//测试4 post发送obj对象// User user = new User();// user.setUsername("POST_JSON");// user.setAge(12);// user.setPasswd("00990099");// String json = postJson("http://localhost:8080/httptojson", user);// System.out.println("json发送成功,返回数据是:" + json);}
}
3.3. 服务端代码
package com.gblfy;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;@Controller
public class AController {@RequestMapping(value = "/postToJson", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")@ResponseBodypublic String postToJson(@RequestBody String json) {System.out.println(json);return json;}@RequestMapping(value = "/getToMap", method = RequestMethod.GET)public String getToMap(@RequestParam(name = "id") String id,@RequestParam(name = "name") String name) {System.out.println(id);System.out.println(name);StringBuffer buf = new StringBuffer();buf.append(id);buf.append(name);return buf.toString();}
}

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

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

相关文章

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

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

计算机专业直接工作简历,2017计算机专业工作简历

如果是现场书写简历的话。字迹潦草&#xff0c;涂改超过3处&#xff0c;一般说明此人比效粗心。我一直觉得不仅相由心生&#xff0c;字也一样。大方开朗的人&#xff0c;字迹不会太小。而且文化程度越高&#xff0c;字迹不说特别漂亮&#xff0c;也不会难看到入不了眼。2017计算…

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

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

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

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

Spring Boot 配置SSL 实现HTTPS

文章目录1. 简介2. 证书生成3. 证书引入4. 创建测试index5. 配置6. 创建配置类7. 创建控制器测试8. 浏览器验证1. 简介 传输层安全性协议&#xff08;英语&#xff1a;Transport Layer Security&#xff0c;缩写作 TLS&#xff09;&#xff0c;及其前身安全套接层 &#xff08…

一幅GAN网络创造的肖像图卖了40万美金,但那又怎样?

在2018年一场著名的拍卖会上&#xff0c;一部AI制作的肖像以432,500美元的价格成交&#xff01;这篇新闻在科技媒体上被广泛讨论&#xff0c;有些人认为这一事件对人类艺术家构成了威胁。其实&#xff0c;这只是深度学习快速发展中众多不可思议的案例中的一个&#xff0c;这些故…

html广告悬浮窗口,JS实现悬浮移动窗口(悬浮广告)的特效

js方法&#xff1a;复制代码 代码如下: New Document window.οnlοadfunction(){//写入var oneInner document.createElement("div");oneInner.setAttribute("style","background:#663398;position:absolute;width:100px;height:100px;border:solid…

PyTorch可视化理解卷积神经网络

如今&#xff0c;机器已经能够在理解、识别图像中的特征和对象等领域实现99&#xff05;级别的准确率。生活中&#xff0c;我们每天都会运用到这一点&#xff0c;比如&#xff0c;智能手机拍照的时候能够识别脸部、在类似于谷歌搜图中搜索特定照片、从条形码扫描文本或扫描书籍…

区块链工程师平均薪资 25~50k?6 个理由告诉你为什么要懂区块链!

作者 | Carol出品 | 区块链大本营&#xff08;blockchain_camp&#xff09;* 文末可参与抽奖活动&#xff01;如果说有一个什么领域&#xff0c;能让中科院、华为、腾讯、京东、360、微众银行的大咖汇聚在一起&#xff0c;那一定是——区块链。悄咪咪地给大家剧透一下&#xff…

SpringBoot Controller接收参数的几种常用方式

第一类&#xff1a;请求路径参数 1、PathVariable 获取路径参数。即url/{id}这种形式。 2、RequestParam 获取查询参数。即url?name这种形式 例子 GET http://localhost:8080/demo/123?namesuki_rong 对应的java代码 GetMapping("/demo/{id}") public void demo…

计算机应用基础抢答题,计算机应用基础问答题

适用于准备计算机应用基础考试的考生1.详述计算系统的主要技术指标&#xff0c;并举例说明它们的含义。 答&#xff1a;1主频&#xff1a;主频即时钟频率&#xff0c;指CPU在单位时间发出的脉冲数。表示CPU的运行速度&#xff0c;是以赫兹为单位&#xff0c;如CPU主频3.0GHz&am…

NLP度量指标BELU真的完美么?

刚接触自然语言处理的朋友通常会问我&#xff1a;当系统的输出是文本&#xff0c;而非对输入文本进行某种分类&#xff0c;如何对该系统进行评估。当模型的输入是文本信息&#xff0c;输出也是文本信息时&#xff0c;我们称之为序列到序列问题&#xff0c;也可称为字符串转换问…

开放华为30年研发能力与实践 助力DevOps真正落地

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹受访者 | 汪维敏出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;高速的中子撞击U235原子核&#xff0c;使其分裂成两个原子核&#xff0c;释放出巨大能量&#xff0c;同时产生的几个中子再去撞击其它…

Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造

千呼万唤始出来&#xff01;阿里妈妈正式公布重磅开源项目——图深度学习框架Euler。这是国内首个在核心业务大规模应用后开源的图深度学习框架。此次开源&#xff0c;Euler内置了大量的算法供用户直接使用&#xff0c;相关代码已经可在GitHub上进行下载。 图学习和深度学习都…

查询某一支接口,指定时间段的数据 按分钟排序

--查询某一支接口,指定时间段的数据 按分钟排序 select a.servicename,reqdate,substr(reqtime,1,5),count&#xff08;1&#xff09;from 表名 awhere servicename 接口名and reqdate date 2020-06-28and reqtime > 16:00:00and reqtime < 17:00:00group by a.service…

天啦噜!在家和爱豆玩quot;剪刀石头布quot;,阿里工程师如何办到?

如今&#xff0c;90、00后一代成为消费主力&#xff0c;补贴、打折、优惠等“价格战”已很难建立起忠诚度&#xff0c;如何与年轻人建立更深层次的情感共鸣&#xff1f;互动就是一种很好的方式&#xff0c;它能让用户更深度的参与品牌/平台呈现的内容&#xff0c;提供更深层的参…

查看计算机或网络资源列表的命令,dos命令net view图文教程,显示网络计算机列表查看共享资源...

大家好&#xff0c;我是老盖&#xff0c;首先感谢观看本文&#xff0c;本篇文章做的有视频&#xff0c;视频讲述的比较详细&#xff0c;也可以看我发布的视频。今天我们学习net命令中的view&#xff0c;它这个命令可以查看网络计算机列表和共享的资源。直接输入net view可以看到…

使用Opencv构建一个简单的图像相似检测器(MSE、SSIM)

介绍 作为人类&#xff0c;我们通常非常善于发现图像中的差异。例如&#xff0c;常见的游戏——两张图像找不同。现在让我们玩下这个游戏吧&#xff0c;首先让我们看看上面的图像&#xff0c;三十秒内看看是否能够从中找出有什么不同的地方。 答案&#xff1a;水果、冰淇淋和…

云+X案例展 | 民生类:云途腾助力城建开启智慧城轨新征程

本案例是由云途腾投递并参与评选&#xff0c;CSDN云计算独家全网首发&#xff1b;更多关于【云X 案例征集】的相关信息&#xff0c;点击了解详情丨挖掘展现更多优秀案例&#xff0c;为不同行业领域带来启迪&#xff0c;推动整个“云行业”的健康发展。2019年7月&#xff0c;城建…

Apache ActiveMQ 各个版本所依赖的JDK版本

ActiveMQ下载地址 http://activemq.apache.org/download-archives.html ActiveMQ 依赖JDK版本 MQ版本号Build-Jdk依赖JDKapache-activemq-5.0.01.5.0_121.5apache-activemq-5.1.01.5.0_121.5apache-activemq-5.2.01.5.0_151.5apache-activemq-5.3.01.5.0_171.5apache-activem…