当前位置: 首页 > news >正文

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访问的基本功能&#xff0c;但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 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需要由多个请求组成的情况&#xff1f;如果是的话&#xff0c;那么对请求的处理和决定是否返回处理过的Item对象就变得格外重要。看一下Scrapy中的相关策略&#xff0c;实现爬虫的完美康复。 …...

【免费直播今天下午!】见微知著 唤醒视觉:机器视觉与成像应用解决方案,诚邀您的参与!

机器视觉的出现和应用突破了人眼目之所及的限制&#xff0c;在工业制造、生物医疗和科学研究等领域&#xff0c;我们利用各种视觉和光电设备&#xff0c;得以在“方寸之地”收获细微之处的画面。 如何找寻行业领先的视觉方案、拓宽视觉应用行业&#xff1f;如何拨开云雾、见微…...

智商均值回归

大家都是做技术的&#xff0c;应该都很聪明。 假如家族的智商极限&#xff0c;【min&#xff0c; max】 一言以蔽之&#xff0c;个人的智商是【min&#xff0c; max】中间的一个值。 同理人类的智商也有个极限值&#xff0c;都在这个范围内浮动。 例如&#xff0c;【1&#…...

ChatGPT助力Excel数据分析:让你的工作事半功倍!

文章目录 一、ChatGPT简介二、ChatGPT在Excel数据分析中的应用1. 数据清洗2. 数据处理3. 数据分析4. 数据可视化 三、如何使用ChatGPT进行Excel数据分析1. 安装ChatGPT插件2. 输入问题或命令3. 查看结果并调整参数4. 导出结果并分享四、总结与展望 《巧用ChatGPT高效搞定Excel数…...

多表插入、删除操作(批量)——后端

多表插入 场景&#xff1a;当添加一个菜品时&#xff0c;还需要记录菜品的口味信息&#xff0c;因此需要对菜品表&#xff08;dish&#xff09;和口味表&#xff08;dish_flavor&#xff09;同时进行插入操作。 两个表的字段&#xff1a; 代码思路&#xff1a;由DishControll…...

Java操作Word修订功能:启用、接受、拒绝、获取修订

Word的修订功能是一种在文档中进行编辑和审阅的功能。它允许多个用户对同一文档进行修改并跟踪这些修改&#xff0c;以便进行审查和接受或拒绝修改。修订功能通常用于团队合作、专业编辑和文件审查等场景。 本文将从以下几个方面介绍如何使用免费工具Free Spire.Doc for Java在…...

什么是数据仪表板?数据可视化仪表盘怎么制作?

在数据经济时代&#xff0c;分析数据是每个企业做出最佳决策的关键。但是&#xff0c;手动分析和解释大量数据是不可行的。数据可视化对于分析数据中存在的各种有价值信息至关重要&#xff0c;包括可见趋势和隐藏趋势等。仪表盘显示可视化趋势和信息&#xff0c;例如 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注意力机制&#xff0c;混合注意力变换器&#xff08;HAT&#xff09;的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要&#xff0c;而自注意力则关注于图…...

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin&#xff0c;对我所用的Community版本无法生效&#xff0c;找了一圈最后在stackoverflow上找到一个有效的方案&#xff0c;给需要的小伙伴分享一下&#xff1a;IntelliJ Community Edition: Javascript syntax hi…...

如何获取旧版 macOS

识别机型支持的最新的兼容操作系统 识别 MacBook Air - 官方 Apple 支持 (中国) 社区网站&#xff1a;AppStore 无法找到macos cata… - Apple 社区 官网链接隐藏比较深&#xff1a;如何下载和安装 macOS - 官方 Apple 支持 (中国) 获取磁盘映像 Lion 10.7 https://update…...

vp与vs联合开发-Ini配置文件

1.*.ini文件是Initialization file的缩写&#xff0c;即为初始化文件&#xff0c;是Windows系统配置文件所采用的存储格式&#xff0c;统管Windows的各项配置&#xff0c; 2.可以用来存放软件信息、注册表信息等 3.可以使用代码方式和手动编辑操作 &#xff0c;一般不用直接编辑…...

Ethernet/IP 之IO 连接简要记录

IO连接 EIP的IO连接提供了在一个生产者和多个消费者之间的特定的通信路径&#xff0c;以达到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&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …...

@Autowired搭配@interface注解实现策略模式

应用场景&#xff1a;存在银行卡和社保卡的支付、退货等接口&#xff0c;接口报文中使用transWay表示银行卡&#xff08;0&#xff09;和社保卡&#xff08;1&#xff09;&#xff0c;transType表示支付&#xff08;1&#xff09;、退货&#xff08;2&#xff09;。那么由其组合…...

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服务停掉&#xff0c;如下点击右键&#xff0c;停止运行。 删除C盘内文件 接下来c盘里面的三个文件下的MySQL一一删除&#xff0c;需要注意的是 需要注意的是programdata文件下可能 隐藏了MySQL文件&#xff0c;所以可以在查看选项显示隐藏的文件。 …...

纵横字谜的答案 Crossword Answers

纵横字谜的答案 Crossword Answers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 翻译后大概是&#xff1a; 有一个 r 行 c 列 (1<r,c<10) 的网格&#xff0c;黑格为 * &#xff0c;每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格&…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...