httpclient发送post请求、httpclient上传文件

引入依赖 

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

1、请求头Content-Type为 application/x-www-form-urlencoded

后端接收方式一:

@RestController
public class PushController {@PostMapping("/sendText")public String sendText(@RequestParam("groupId") String groupId, @RequestParam("content") String content) {System.out.println(groupId);System.out.println(content);return "ok";}
}

或者省略注解@RequestParam

@RestController
public class PushController {@PostMapping("/sendText")public String sendText(String groupId, String content) {System.out.println(groupId);System.out.println(content);return "ok";}
}

 后端接收方式二: 

@RestController
public class PushController {@PostMapping("/sendText")public String sendText(HttpServletRequest request) {String groupId = request.getParameter("groupId");String content = request.getParameter("content");System.out.println(groupId);System.out.println(content);return "ok";}
}

httpclient客户端发送方式: 

public static void main(String[] args) {try {String url = "http://localhost:8080/robot/sendText";// 创建 HttpClient 实例CloseableHttpClient httpClient = HttpClients.createDefault();// 使用 URIBuilder 构建带查询参数的 URLURIBuilder uriBuilder = new URIBuilder(url);uriBuilder.setParameter("groupId", "379395298");uriBuilder.setParameter("content", "测试");// 创建 POST 请求实例HttpPost httpPost = new HttpPost(uriBuilder.build());httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");// 设置请求配置,包括超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000) // 设置 socket 超时时间,单位为毫秒.setConnectTimeout(5000) // 设置连接超时时间,单位为毫秒.build();httpPost.setConfig(requestConfig);// 执行请求CloseableHttpResponse response = httpClient.execute(httpPost);// 获取响应实体HttpEntity responseEntity = response.getEntity();// 打印响应状态System.out.println("响应状态: " + response.getStatusLine().getStatusCode());// 如果响应实体不为空,则转换为字符串并打印if (responseEntity != null) {String responseString = EntityUtils.toString(responseEntity, "UTF-8");System.out.println("响应结果: " + responseString);}// 关闭 HttpClientresponse.close();httpClient.close();} catch (Exception e) {e.printStackTrace();}}

2、请求头Content-Type为application/json

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交.

在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用
@RequestBody最多只能有一个,而@RequestParam()可以有多个。

 后端接收方式一:

@RestController
public class PushController {@PostMapping("/sendText")public String sendText(@RequestBody Map<String, Object> params) {String groupId = (String) params.get("groupId");String content = (String) params.get("content");System.out.println(groupId);System.out.println(content);return "ok";}
}

 后端接收方式二: 

public class User {private String groupId;private String content;public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}
@RestController
public class PushController {@PostMapping("/sendText")public String sendText(@RequestBody User user) {String groupId = user.getGroupId();String content = user.getContent();System.out.println(groupId);System.out.println(content);return "ok";}
}

httpclient客户端发送方式: 

    public static void main(String[] args) {try {String url = "http://localhost:8080/robot/sendText";// 创建 HttpClient 实例CloseableHttpClient httpClient = HttpClients.createDefault();// 创建 POST 请求实例HttpPost httpPost = new HttpPost(url);// 设置请求内容HashMap<String, Object> map = new HashMap<>();map.put("groupId", "379395298");map.put("content", "测试");ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(map);StringEntity entity = new StringEntity(json, "UTF-8");httpPost.setEntity(entity);httpPost.setHeader("Content-Type", "application/json");// 设置请求配置,包括超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000) // 设置 socket 超时时间,单位为毫秒.setConnectTimeout(5000) // 设置连接超时时间,单位为毫秒.build();httpPost.setConfig(requestConfig);// 执行请求CloseableHttpResponse response = httpClient.execute(httpPost);// 获取响应实体HttpEntity responseEntity = response.getEntity();// 打印响应状态System.out.println("响应状态: " + response.getStatusLine().getStatusCode());// 如果响应实体不为空,则转换为字符串并打印if (responseEntity != null) {String responseString = EntityUtils.toString(responseEntity, "UTF-8");System.out.println("响应结果: " + responseString);}// 关闭 HttpClientresponse.close();httpClient.close();} catch (Exception e) {e.printStackTrace();}}

3、httpclient上传文件

 后端接收方式一:

@RestController
public class PushController {@PostMapping("/sendText")public String sendText(@RequestParam("file") MultipartFile file, HttpServletRequest request) {File f = null;try {if (!file.isEmpty()) {String fileName = file.getOriginalFilename();int indexOf = fileName.lastIndexOf(".");String prefix = fileName.substring(0, indexOf);String suffix = fileName.substring(indexOf);// 保存文件f = new File("/tmp/" + prefix + UUID.randomUUID().toString().replace("-", "") + suffix);if (!f.getParentFile().exists()) {f.getParentFile().mkdirs();}file.transferTo(f.getAbsoluteFile());String filePath = f.getAbsolutePath();String groupId = request.getParameter("groupId");String content = request.getParameter("content");System.out.println(filePath);System.out.println(groupId);System.out.println(content);}} catch (Exception e) {e.printStackTrace();} finally {// 删除文件if (f != null) {f.delete();}}return "ok";}
}

 httpclient客户端发送方式: 

    public static void main(String[] args) {FileInputStream fis = null;try {String url = "http://localhost:8080/robot/sendText";String filePath = "F:/test.xlsx";// 创建 HttpClient 实例CloseableHttpClient httpClient = HttpClients.createDefault();// 创建 POST 请求实例HttpPost httpPost = new HttpPost(url);// 创建 MultipartEntityBuilderMultipartEntityBuilder builder = MultipartEntityBuilder.create();// 添加文本部分builder.addTextBody("groupId", "379395298", ContentType.TEXT_PLAIN.withCharset("UTF-8"));builder.addTextBody("content", "测试", ContentType.TEXT_PLAIN.withCharset("UTF-8"));// 添加文件部分File file = new File(filePath);fis = new FileInputStream(file);builder.addBinaryBody("file",fis,ContentType.APPLICATION_OCTET_STREAM,file.getName());// 构建 HttpEntityHttpEntity multipart = builder.build();// 设置 HttpPost 的实体httpPost.setEntity(multipart);// 设置请求配置,包括超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000) // 设置 socket 超时时间,单位为毫秒.setConnectTimeout(5000) // 设置连接超时时间,单位为毫秒.build();httpPost.setConfig(requestConfig);// 执行请求CloseableHttpResponse response = httpClient.execute(httpPost);// 获取响应实体HttpEntity responseEntity = response.getEntity();// 打印响应状态System.out.println("响应状态: " + response.getStatusLine().getStatusCode());// 如果响应实体不为空,则转换为字符串并打印if (responseEntity != null) {String responseString = EntityUtils.toString(responseEntity, "UTF-8");System.out.println("响应结果: " + responseString);}// 关闭 HttpClientresponse.close();httpClient.close();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}

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

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

相关文章

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人&#xff0c;其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件&#xff1a; 1. **电动马达**&#xff1a;波士顿动力的机器人采用了先进的电动马达作为主要的动力源&#xff0c;如伺服电机或步进…

【数据分享】2014-2024年全国监测站点的逐时空气质量数据(15个指标\Excel\Shp格式)

空气质量的好坏反映了空气的污染程度&#xff0c;在各项涉及城市环境的研究中&#xff0c;空气质量都是一个十分重要的指标。空气质量是依据空气中污染物浓度的高低来判断的。 我们发现学者王晓磊在自己的主页里面分享了2014年5月以来的全国范围的到站点的逐时的空气质量数据&…

OpenCV运行gstreamer管道获取相机数据,处理以后,再交给gstreamer显示(QT实现)

前言 无意中发现&#xff0c;OpenCV也可以运行gstreamer的命令管道&#xff0c;然后使用appsink来与OpenCV连接起来进行处理&#xff0c;在不断测试之下&#xff0c;先后实现了以下功能&#xff1a; 1. OpenCV运行gstreamer命令&#xff0c;通过appsink传递给OpenCV显示 2. Ope…

Java入门及环境变量

文章目录 1.1 Java简介1.2 JDK的下载和安装1.3 第一个程序1.4 常见问题1.5 常用DOS命令1.6 Path环境变量 1.1 Java简介 下面我们正式进入Java的学习&#xff0c;在这里&#xff0c;大家第一个关心的问题&#xff0c;应该就是 Java 是什么&#xff0c;我们一起来看一下&#xf…

ktutil编写生成keytab文件的脚本、通过keytab文件认证用户

文章目录 1. 生成keytab文件脚本2. 通过keytab文件认证3. 查看认证的用户4. 失效认证的用户 1. 生成keytab文件脚本 生成keytab文件的脚本 vim generate_kb.sh #!/usr/bin/bash ktutil <<EOF add_entry -password -p $1 -k 1 -e arcfour-hmac $2 write_kt $3 EOF示例&am…

C语言系列-带有副作用的宏参数#和##命名约定宏替换的规则

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 目录 带有副作用的宏参数 宏替换的规则 宏函数的对比 #和## #运算符 ##运算符 命名约定 #undef 带有副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候&#xff0c;如果…

Offer必备算法07_递归_五道力扣题详解(由易到难)

目录 递归算法原理 ①力扣面试题 08.06. 汉诺塔问题 解析代码 ②力扣21. 合并两个有序链表 解析代码 ③力扣206. 反转链表 解析代码 ④力扣24. 两两交换链表中的节点 解析代码 ⑤力扣50. Pow(x, n) 解析代码 本篇完。 递归算法原理 递归算法个人经验&#xff1a;给…

PHP支持的伪协议

php.ini参数设置 在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。 allow_url_fopen:默认值是ON。允许url里的封装协议访问文件&#xff1b; allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件&#xff1b; 各协议的利用条件和方法 php:/…

图数据库 之 Neo4j - 应用场景1 - 欺诈检测(6)

Neo4j是一种图数据库,它专注于处理关系数据密集型的问题。由于其图结构的特性,Neo4j能够高效地存储、查询和分析连接数据。 以下是一些常见的Neo4j应用场景: 社交网络分析:通过建模和分析人际关系,可以揭示社交网络中的影响力、社区结构、信息传播等重要信息。金融领域:…

数据结构OJ题——top-k问题:最小的K个数(Java实现)

题目链接&#xff1a;top-k问题&#xff1a;最小的K个数 top-k问题&#xff1a;最小的K个数假 1.方法一2.方法二时间复杂度 3.方法三时间复杂度 1.方法一 各种排序算法&#xff08;由于本文主要讲有关堆的使用&#xff0c;这里不做有关排序算法解决本题的介绍。对于Top-K问题…

linux(阿里云)安装pytorch

目录 环境 安装步骤 1 检查python3和pip3是否已经安装 2 安装pytorch 3 安装完毕&#xff0c;检查pytorch版本 环境 阿里云 ubuntu 22.04 UEFI版 64位 安装步骤 1 检查python3和pip3是否已经安装 输入下面两条指令&#xff1a; python3 --version pip --version 检…

1Panel使用GMSSL+Openresty实现国密/RSA单向自适应

本文 首发于 Anyeの小站&#xff0c;转载请取得作者同意。 前言 国密算法是国家商用密码算法的简称。自2012年以来&#xff0c;国家密码管理局以《中华人民共和国密码行业标准》的方式&#xff0c;陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”&a…

ChatGPT对软件测试的影响!

ChatGPT 是一个经过预训练的 AI 语言模型&#xff0c;可以通过聊天的方式回答问题&#xff0c;或者与人闲聊。它能处理的是文本类的信息&#xff0c;输出也只能是文字。它从我们输入的信息中获取上下文&#xff0c;结合它被训练的大模型&#xff0c;进行分析总结&#xff0c;给…

【C++杂货铺】string详解

目录 1. 基本概念&#xff1a; 1.1 本质&#xff1a; 1.2 string和char*区别&#xff1a; 1.3 特点&#xff1a; 2. 构造函数(初始化) 3. 赋值操作 4. 字符串拼接 5 查找 和 替换 6. 字符串比较 7. 字符存取 8. 插入和删除 ​9. 子串获取 &#x1f308;前言&#x…

Rocky Linux网卡静态配置

一、开源系统 Rocky Linux 下载安装 1、安装教程 Rocky Linux 下载安装 二、远程工具 MobaXterm下载安装 1、安装教程 MobaXterm 下载安装 三、Rocky Linux 网卡配置 1、使用ip addr确认网卡名称&#xff08;此处可得知网卡为ens160&#xff09; [rootlocalhost ~]# ip a 1:…

【笔记】Helm-5 Chart模板指南-14 下一步

下一步 本指南旨在为chart开发者提供对如何使用Helm模板语言的强大理解能力。该模板聚焦于模板开发的技术层面。 但涉及到chart的实际日常开发时&#xff0c;很多内容本指南并没有覆盖到。这里有一些有用的文档链接帮助您创建新的chart&#xff1a; CNCF的 Artifact Hub 是ch…

23款奔驰GLE350升级小柏林音响 安装效果分享

小柏林之声音响是13个喇叭1个功放&#xff0c;功率是590W&#xff0c;对应普通音响来说&#xff0c;已经是上等了。像著名的哈曼卡顿音响&#xff0c;还是丹拿音响&#xff0c;或者是BOSE音响&#xff0c;论地位&#xff0c;论音质柏林之声也是名列前茅。星骏汇小许Xjh15863 升…

2.C语言——输入输出

1.字符输入输出函数 1.输入:getchar() 字面意思&#xff0c;接收单个字符&#xff0c;使用方法 char a; a getchar();实际上效果等同于char a; scanf("%c",&a);2.输出:putchar() 2.格式化输入输出函数 1.输入:scanf() 格式&#xff1a; scanf(“格式控制…

【SpringBoot5】SpringBoot如何找到我们写的类的

目录 1.Spring如何加载我们的类的 2.Spring注解驱动发展史与核心注解介绍 2.1 Spring驱动发展简史 2.2 @Configuration和@Bean注解 2.3 @Import以及相关注解 3.看看SpringBoot的启动的入口 3.1 @SpringBootConfiguration注解 3.2 @EnableAutoConfiguration注解 4.SpringBo…

Axes属性汇总

Axes属性很多&#xff0c;主要起控制坐标区的外观和行为的作用&#xff0c;共涉及十三类。 第1类&#xff1a;字体 Font Name——字体名称&#xff0c;默认为’Helvetica’。 要使用在任何区域设置中都有较好显示效果的等宽字体&#xff0c;请使用 “FixedWidth”。等宽字体依…