RPC(3):HttpClient实现RPC之GET请求
1HttpClient简介
在JDK中java.net包下提供了用户HTTP访问的基本功能,但是它缺少灵活性或许多应用所需要的功能。
HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。2007年成为顶级项目。
通俗解释:HttpClient可以实现使用Java代码完成标准HTTP请求及响应。
2 新建服务端项目
新建项目httpclient_rpc_server

2.1 修改maven配置文件
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.2.RELEASE</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
2.2 新建控制器
package com.example.httpclientserver.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class TestController {/** 带参数的get请求*/@RequestMapping(value="/params", produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String params(String name, String password){System.out.println("name - " + name + " ; password - " + password);return "{\"msg\":\"登录成功\", \"user\":{\"name\":\""+name+"\",\"password\":\""+password+"\"}}";}/** 不带参数的get请求*/@RequestMapping(value="/test",produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String test(){return "{\"msg\":\"处理返回\"}";}
}
2.3 新建启动器
package com.example.httpclientserver;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ServerApp {public static void main(String[] args) {SpringApplication.run(ServerApp.class, args);}
}
2.4 application.yml修改端口(非必需操作)
server:port: 80
2.5 测试


3 新建客户端项目
新建客户端项目httpclient_rpc_client

3.1 添加maven依赖
<dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.12</version></dependency></dependencies>
3.2 新建主类进行httpclient访问
package com.example.httpclient;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;public class TestHttpClient {public static void main(String[] args) throws Exception {//访问无参数GET请求testGetNoParams();//访问有参数GET请求testGetNoParams();}/*** 有参数GET请求* @throws IOException*/public static void testGetParams() throws IOException, URISyntaxException {HttpClient client = HttpClients.createDefault();// 基于Builder构建请求地址URIBuilder builder = new URIBuilder("http://localhost:80/params");// 基于单参数传递,构建请求地址
// builder.addParameter("name", "bjsxt");
// builder.addParameter("password", "admin123");
// URI uri = builder.build();// 基于多参数传递,构建请求地址List<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("name","bjsxt"));nvps.add(new BasicNameValuePair("password", "admin123"));builder.addParameters(nvps);URI uri = builder.build();System.out.println(uri.toASCIIString());String result = EntityUtils.toString(client.execute(new HttpGet(uri)).getEntity());System.out.println(result);}/*** 无参数GET请求* 使用浏览器,访问网站的过程是:* 1、 打开浏览器* 2、 输入地址* 3、 访问* 4、 看结果* 使用HttpClient,访问WEB服务的过程:* 1、 创建客户端,相当于打开浏览器* 2、 创建请求地址, 相当于输入地址* 3、 发起请求, 相当于访问网站(回车键)* 4、 处理响应结果, 相当于浏览器显示结果*/public static void testGetNoParams() throws IOException {// 创建客户端对象HttpClient client = HttpClients.createDefault();// 创建请求地址HttpGet get = new HttpGet("http://localhost:80/test");// 发起请求,接收响应对象HttpResponse response = client.execute(get);// 获取响应体。 响应数据是一个基于HTTP协议标准字符串封装的对象。// 所以,响应体和响应头,都是封装的HTTP协议数据。直接使用可能有乱码或解析错误HttpEntity entity = response.getEntity();// 通过HTTP实体工具类,转换响应体数据。 使用的字符集是UTF-8String responseString = EntityUtils.toString(entity, "UTF-8");System.out.println("服务器响应数据是 - [ " + responseString + " ]");// 回收资源client = null;}
}
其中有参请求方式有两种,一种是基于单参数传递,构建请求地址,如下:
// 基于单参数传递,构建请求地址builder.addParameter("name", "bjsxt");builder.addParameter("password", "admin123");URI uri = builder.build();
一种是基于多参数传递,构建请求地址,如下:
// 基于多参数传递,构建请求地址List<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("name","bjsxt"));nvps.add(new BasicNameValuePair("password", "admin123"));builder.addParameters(nvps);URI uri = builder.build();
4 测试
启动httpclient_rpc_server和httpclient_rpc_client,httpclient_rpc_client控制台输出如下:

GET请求成功。
相关文章:
RPC(3):HttpClient实现RPC之GET请求
1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能,但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H…...
PHP函数里面写JQ CSS HTML的写法案例
/*** description: 返回顶部* param {*}* return {*}*/public function gotop() {global $_L, $COMCFG;$plugin $COMCFG[plugin][gotop] ?: [];$plugin array_merge(["right" > 30,"bottom" > 80,"color" > "rgba(255, 25…...
爬虫工作量由小到大的思维转变---<第十八章 Scrapy请求处理与返回策略>
前言: 今天我们来聊一聊Scrapy爬虫中的请求处理与返回策略。你有没有遇到过一个Item需要由多个请求组成的情况?如果是的话,那么对请求的处理和决定是否返回处理过的Item对象就变得格外重要。看一下Scrapy中的相关策略,实现爬虫的完美康复。 …...
【免费直播今天下午!】见微知著 唤醒视觉:机器视觉与成像应用解决方案,诚邀您的参与!
机器视觉的出现和应用突破了人眼目之所及的限制,在工业制造、生物医疗和科学研究等领域,我们利用各种视觉和光电设备,得以在“方寸之地”收获细微之处的画面。 如何找寻行业领先的视觉方案、拓宽视觉应用行业?如何拨开云雾、见微…...
智商均值回归
大家都是做技术的,应该都很聪明。 假如家族的智商极限,【min, max】 一言以蔽之,个人的智商是【min, max】中间的一个值。 同理人类的智商也有个极限值,都在这个范围内浮动。 例如,【1&#…...
ChatGPT助力Excel数据分析:让你的工作事半功倍!
文章目录 一、ChatGPT简介二、ChatGPT在Excel数据分析中的应用1. 数据清洗2. 数据处理3. 数据分析4. 数据可视化 三、如何使用ChatGPT进行Excel数据分析1. 安装ChatGPT插件2. 输入问题或命令3. 查看结果并调整参数4. 导出结果并分享四、总结与展望 《巧用ChatGPT高效搞定Excel数…...
多表插入、删除操作(批量)——后端
多表插入 场景:当添加一个菜品时,还需要记录菜品的口味信息,因此需要对菜品表(dish)和口味表(dish_flavor)同时进行插入操作。 两个表的字段: 代码思路:由DishControll…...
Java操作Word修订功能:启用、接受、拒绝、获取修订
Word的修订功能是一种在文档中进行编辑和审阅的功能。它允许多个用户对同一文档进行修改并跟踪这些修改,以便进行审查和接受或拒绝修改。修订功能通常用于团队合作、专业编辑和文件审查等场景。 本文将从以下几个方面介绍如何使用免费工具Free Spire.Doc for Java在…...
什么是数据仪表板?数据可视化仪表盘怎么制作?
在数据经济时代,分析数据是每个企业做出最佳决策的关键。但是,手动分析和解释大量数据是不可行的。数据可视化对于分析数据中存在的各种有价值信息至关重要,包括可见趋势和隐藏趋势等。仪表盘显示可视化趋势和信息,例如 KPI、趋势…...
HiveServer2
HiveServer2 基本概念介绍 1、HiveServer2基本介绍 HiveServer2 (HS2) is a server interface that enables remote clients to execute queries against Hive and retrieve the results (a more detailed intro here). The current implementation, based on Thrift RPC, i…...
YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)
一、本文介绍 本文给大家带来的改进机制是HAttention注意力机制,混合注意力变换器(HAT)的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要,而自注意力则关注于图…...
IDEA Community html文件里的script标签没有syntax highlighting的解决方案
在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin,对我所用的Community版本无法生效,找了一圈最后在stackoverflow上找到一个有效的方案,给需要的小伙伴分享一下:IntelliJ Community Edition: Javascript syntax hi…...
如何获取旧版 macOS
识别机型支持的最新的兼容操作系统 识别 MacBook Air - 官方 Apple 支持 (中国) 社区网站:AppStore 无法找到macos cata… - Apple 社区 官网链接隐藏比较深:如何下载和安装 macOS - 官方 Apple 支持 (中国) 获取磁盘映像 Lion 10.7 https://update…...
vp与vs联合开发-Ini配置文件
1.*.ini文件是Initialization file的缩写,即为初始化文件,是Windows系统配置文件所采用的存储格式,统管Windows的各项配置, 2.可以用来存放软件信息、注册表信息等 3.可以使用代码方式和手动编辑操作 ,一般不用直接编辑…...
Ethernet/IP 之IO 连接简要记录
IO连接 EIP的IO连接提供了在一个生产者和多个消费者之间的特定的通信路径,以达到IO数据在IO连接下传输。 生产者对象产生IO数据通过生产者IO连接管理者对象将连接ID和数据组帧发送给消费者IO连接管理者对象然后将IO数据发送给消费者对象。 显示消息连接 显式消息传…...
【python基础】-- yarn add 添加依赖的各种类型
目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add(会更新package.json和yarn.lock) 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …...
@Autowired搭配@interface注解实现策略模式
应用场景:存在银行卡和社保卡的支付、退货等接口,接口报文中使用transWay表示银行卡(0)和社保卡(1),transType表示支付(1)、退货(2)。那么由其组合…...
Linux CentOS下Composer简单使用
1.下载composer-setup.php cd /usr/local/src php -r “copy(‘https://install.phpcomposer.com/installer’, ‘composer-setup.php’);”2.安装composer php composer-setup.php3.设置全局composer cp composer.phar /usr/local/bin/composer4.设置国内镜像 composer co…...
Mysql-干净卸载教程
卸载 服务停掉 先把mysql服务停掉,如下点击右键,停止运行。 删除C盘内文件 接下来c盘里面的三个文件下的MySQL一一删除,需要注意的是 需要注意的是programdata文件下可能 隐藏了MySQL文件,所以可以在查看选项显示隐藏的文件。 …...
纵横字谜的答案 Crossword Answers
纵横字谜的答案 Crossword Answers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 翻译后大概是: 有一个 r 行 c 列 (1<r,c<10) 的网格,黑格为 * ,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格&…...
金融Agent再获近2亿加码!启明红杉高瓴集体押注,5个月内连获两轮融资
允中 发自 凹非寺量子位 | 公众号 QbitAI近日,金融AI领跑者讯兔科技(Alpha派)正式完成近2亿元A轮融资。继去年10月完成超亿元Pre-A轮融资后,讯兔科技在短短5个月内再获顶级机构强强加持。本轮由启明创投、红杉中国、高瓴创投共同领…...
Qwen3.5-4B-Claude-Opus真实作品:网络协议TCP三次握手状态机推理生成
Qwen3.5-4B-Claude-Opus真实作品:网络协议TCP三次握手状态机推理生成 1. 模型介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,专门针对结构化分析、分步骤回答、代码与逻辑类问题进行了优化。该模型…...
3个关键步骤:Smiley Sans字体技术优化指南
3个关键步骤:Smiley Sans字体技术优化指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans:一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 在当今数字化时代,网页性能直…...
Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节
Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节 最近在尝试各种文生图模型时,我发现了一个挺有意思的现象:很多模型在处理简单描述时表现不错,但一旦遇到包含多个对象、复杂关系或者长段描述的提示词&#x…...
老设备焕新:OCLP更新系统全解析
老设备焕新:OCLP更新系统全解析 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果对旧款Mac设备的系统支持逐渐终止,许多仍能正常工作的老设…...
美胸-年美-造相Z-Turbo入门实战:跟着步骤操作,快速产出作品
美胸-年美-造相Z-Turbo入门实战:跟着步骤操作,快速产出作品 1. 快速了解美胸-年美-造相Z-Turbo 美胸-年美-造相Z-Turbo是一款基于Z-Image-Turbo架构优化的文生图模型,特别擅长生成具有特定艺术风格的人物图像。这个镜像已经预装了所有必要的…...
160+实用功能:OneMore插件如何让OneNote笔记管理效率翻倍?[特殊字符]
160实用功能:OneMore插件如何让OneNote笔记管理效率翻倍?🚀 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为OneNote单调的功…...
游戏界面开发与UI框架:零基础上手卡牌游戏界面开发与性能调优
游戏界面开发与UI框架:零基础上手卡牌游戏界面开发与性能调优 【免费下载链接】UiCard Generic UI for card games like Hearthstone, Magic Arena and Slay the Spire... 项目地址: https://gitcode.com/gh_mirrors/ui/UiCard 问题诊断:卡牌UI开…...
FPGA状态机实战:用Verilog实现自动售卖机(附三段式完整代码)
FPGA状态机实战:用Verilog实现自动售卖机(附三段式完整代码) 在数字电路设计中,状态机是最核心的设计思想之一。它能够将复杂的控制逻辑分解为有限的状态和状态之间的转换,使得设计更加清晰、可维护。自动售卖机作为一…...
新手福音:通过快马平台生成带注释的nap自动化运维脚本快速入门
作为一个刚接触网络自动化运维的新手,第一次看到"深圳网络自动化运维nap"这个概念时,整个人都是懵的。各种专业术语、复杂的协议和库让我望而却步,直到发现了InsCode(快马)平台,才真正找到了入门的好方法。 为什么选择n…...
