【苍穹外卖】HttpClient-快速理解入门

目录

  • HttpClient-快速理解&入门
    • 1. 需求
    • 2. 如何使用
    • 3. 具体示例
    • 4. 大致优点
    • 5. 大致缺点

HttpClient-快速理解&入门

1. 需求

在平常访问服务器里面的资源的时候,我们通常是通过浏览器输入网址(或者在浏览器点击某个连接)这种方式,如发出Ajax等异步请求,对于目前大多数的前后端分离项目则是通过访问浏览器到前端服务器再到后端服务器。

像这样:

Alt

有没有一种使用场景,是需要服务器去发出请求的?即通过编码的方式发出请求,获取资源或者是服务?

答案是有,而且非常多,人的精力是有限的,项目的功能也是有限的,有些功能不是开发的重点,则借助第三方的服务可以省时省力,降低开发难度。

常见的应用场景如下:

  • 调用第三方API:当你的应用需要从外部服务获取数据时,例如,调用天气 API 获取实时天气信息,调用支付 API 进行支付操作等。
  • 与其它微服务通信:在微服务架构中,不同的服务可能分布在不同的服务器上,它们之间需要进行通信来完成业务逻辑。在服务之间发送 HTTP 请求,进行数据交换和协作。例如,一个服务可能需要从另一个服务获取用户信息或订单信息。

HttpClient技术就实现了这样的功能,即让服务器去发出请求,获取外部资源或者是服务

Alt

2. 如何使用

HttpClient技术的实现非常方便,大致步骤如下:

  1. 导入Maven坐标:

    <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
    </dependency>
    
  2. 获取HttpClient对象

  3. 根据请求的方式,创建对应的请求对象,如HttpGet\HttpPost

  4. 设置路径参数或者是请求体参数(如果是请求体参数,则需要这是请求的编码方式和数据格式)

  5. 处理返回对象

  6. 关闭资源

3. 具体示例

  • 服务器发送Get请求:
    这里是请求了项目中的一个Get接口,请求成功会放回一个Integer类型的数据,即1或0

    @Testvoid testGet() throws IOException {//获取HttpClient对象CloseableHttpClient httpClient = HttpClients.createDefault();//创建请求对象String url = "http://localhost:8080/user/shop/status";HttpGet httpGet = new HttpGet(url);//发送请求,接受返回结果CloseableHttpResponse response = httpClient.execute(httpGet);//----处理返回结果//获取服务端返回的状态码int statusCode = response.getStatusLine().getStatusCode();System.out.println("服务端返回的状态码为:"+statusCode);//获取服务端返回的数据HttpEntity entity = response.getEntity();//对HttpEntity对象进行解析(字符串)String body = EntityUtils.toString(entity);System.out.println(body);//关闭资源response.close();httpClient.close();}
    
  • 服务器发送Post请求:
    这里是向项目发送了一个登录请求,请求方式是Post,通过请求体携带参数(账号和密码),返回的数据是一个jwt令牌,注意这里要设置请求的编码方式和请求体的数据格式,、。

    @Testvoid testPost() throws Exception {//获取httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();//url地址String url = "http://localhost:8080/admin/employee/login";//获取HttpPost对象HttpPost httpPost = new HttpPost(url);//模拟请求体数据--数据格式为jsonJSONObject jsonObject = new JSONObject();jsonObject.put("username", "admin");jsonObject.put("password", "123456");//设置请求体参数对象-这里HttpEntity的实现类-StringEntityStringEntity stringEntity = new StringEntity(jsonObject.toJSONString());httpPost.setEntity(stringEntity);//设置请求编码格式stringEntity.setContentEncoding("utf-8");//设置请求体数据格式stringEntity.setContentType("application/json");//发送post请求CloseableHttpResponse response = httpClient.execute(httpPost);//获取返回数据int statusCode = response.getStatusLine().getStatusCode();System.out.println("状态响应码:" + statusCode);HttpEntity entity = response.getEntity();//将返回的实体类解析为字符串String resultData = EntityUtils.toString(entity);System.out.println("返回数据:" + resultData);//关闭资源response.close();httpClient.close();}
    

4. 大致优点

  • 没有跨域问题。
  • 降低了开发难度。
  • 可以实现爬虫和网络抓取。
  • 可以发送异步请求。
  • 跨平台,多种编程语言和操作系统都可以使用。

5. 大致缺点

  • 消耗服务器的资源。
  • HTTPClient 在发送请求时可能会暴露敏感信息,如用户名、密码等,因此在使用时需要注意安全问题。
  • 不同版本的 HTTPClient 可能会有不同的特性和行为,导致在不同环境下出现兼容性问题,需要进行额外的测试和处理。

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

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

相关文章

测试的分类(2)

目录 按照执行方式分类 静态测试 动态测试 按照测试方法 灰盒测试 按照测试阶段分类 单元测试 集成测试 系统测试 冒烟测试 回归测试 按照执行方式分类 静态测试 所谓静态测试就是不实际运行被测软件,只是静态地检查程序代码, 界面或文档中可能存在错误的过程. 不以…

ffmpeg安装使用(详细)

目录结构 前言ffmpeg下载ffmpeg环境变量配置ffmpeg环境变量配置验证ffmpeg使用举例说明.mp4 转 .wav.mp3 转 .wav.ogg 转 .wav 参考链接 前言 本文主要记录ffmpeg在Windows系统中的安装使用方法。 ffmpeg下载 FFmpeg官网下载 ffmpeg环境变量配置 解压后将“.\ffmpeg\bin”…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步&#xff1a; 1. 第一步就是修改cmakelist.txt&#xff0c;到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉&#xff0c;原来的一般都不是调试模式。加上下面一行代码&#xff0c;意思是设置调试模式。 # 断点调试 SET(CMAK…

【Linux】文件基本属性

Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 在 Linux 中我们可以使用 ll 或者 …

《你想活出怎样的人生》上映,AOC带你打开宫崎骏的动画世界大门!

摘要&#xff1a;宫崎骏式美学&#xff0c;每一帧都是治愈&#xff01; 近日&#xff0c;宫崎骏新作《你想活出怎样的人生》正式公映。苍鹭与少年的冒险、奇幻瑰丽的场景、爱与成长的主题&#xff0c;让观众们收获到满满的爱与感动。宫崎骏总能以细腻的画面、温柔的音乐&#…

设计模式——模板方法

1)模板方法模式(Template Method Pattem)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2)简单说&#xff0c;模板方法模式 定义一个操作中…

ETLCloud中多并行分支运行的设计技巧

在大数据处理领域&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;流程是至关重要的一环&#xff0c;它涉及数据的提取、转换和加载&#xff0c;以确保数据的质量和可用性。而在ETL流程中&#xff0c;多并行分支的运行设计是一项关键技巧&#xff0c;可以有效…

华为ensp中MSTP多网段传输协议(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月22日15点29分 在华为ENSP中&#xff0c;MSTP&#xff08;多段传输协议&#xff09;是重要的生成树协议&#xff0c;它扩展了STP&#xff08;生成树协议&#xff09…

猴子摘桃问题(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int sum 1;int i 0;//运算&#xff1b;for (i 1; i < 10; i){//运算&#xff1b;sum …

typecho博客的相对地址实现

typecho其中的博客地址,必须写上绝对地址,否则在迁移网址的时候会出现问题,例如页面记载异常 修改其中的 typecho\var\Widget\Options\General.php 中的165行左右, /** 站点地址 */if (!defined(__TYPECHO_SITE_URL__)) {$siteUrl new Form\Element\Text(siteUrl,null,$this-…

怎么把3d模型旋转加复制---模大狮模型网

在3D设计中&#xff0c;旋转和复制模型是常见且重要的操作&#xff0c;它们可以帮助设计师创建复杂的场景并节省时间。本文将介绍如何在3D建模软件中旋转并复制模型&#xff0c;以及一些技巧和注意事项&#xff0c;帮助您轻松实现这些操作。 旋转3D模型&#xff1a; 旋转3D模型…

心理学|变态心理学健康心理学——躯体疾病患者的一般心理特点

一、对客观世界和自身价值的态度发生改变 患者除了内部器官有器质或功能障碍外&#xff0c;他们的自我感觉和整个精神状态也会发生变化。使人改变对周围事物的感受和态度&#xff0c;也可以改变患者对自身存在价值的态度。这种主观态度的改变&#xff0c;可以使患者把自己置于人…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

BFS解决FloodFill算法:(Leetcode:200. 岛屿数量)

题目链接&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 本题由于没有给出开始搜索的位置&#xff0c;所以每一个位置都要进行一次广度优先搜索 另外为了不修改原数组数据&#xff0c;需要设置一个bool类型的二维数组vis来判断某个位置是否被搜索过 cl…

Numpy方法总结(二)

一. 高级索引 相比于基本索引&#xff0c;高级索引可以访问到数组中的任意元素&#xff0c;并且可以用来对数组进行复杂的操作和修改。 1.整数数组索引 整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。 示例…

MapReduce——ReudceTask并行度决定机制

MapReduce——ReudceTask并行度决定机制 1. Reduce任务的数量&#xff08;reduce task count&#xff09;&#xff1a; 这是最基本的决定因素之一。在作业启动时&#xff0c;用户可以指定Reduce任务的数量。更多的Reduce任务意味着更多的并行度&#xff0c;因为每个Reduce任务…

150G全国1米分辨率土地利用数据【2023年】

#1数据摘要 全国1米分辨率土地利用数据 全国范围,分省份分类,1米精度土地利用数据。2023年版本。 数据格式:tif 坐标系:wgs1984 范围:全国各省份 时间:2023年 精度:1米 地类:共计11个地类 中国1m分辨率土地覆盖数据 文件命名与介绍:数据为GeoTIFF栅格格式,每个城市…

Excel 公式的定义、语法和应用(LOOKUP 函数、HLOOKUP 函数、VLOOKUP 函数;MODE.MULT 函数; ROUND 函数)

一、公式的定义和语法 二、公式的应用 附录 查找Excel公式使用方法的官方工具【强烈推荐!!!】:Excel 函数(按字母顺序)【微软官网】 excel 函数说明语法LOOKUP 函数在向量或数组中查找值LOOKUP(lookup_value, lookup_vector, [result_vector])

Webfunny前端监控如何接入飞书单点登录(SSO)

Hello&#xff0c;大家好&#xff0c;欢迎使用**webfunny前端监控和埋点平台**。今天我们将介绍一下如何接入飞书的登录系统。 友情提示&#xff1a;如果飞书侧已经配置好了&#xff0c;可以直接跳到第六步阅读。 一、创建飞书网页项目 进入飞书开发者后台&#xff0c;创建企…

大话设计模式-装饰器模式

大话设计模式书中&#xff0c;作者举了一个穿衣服的例子来为我们引入装饰器模式。 概念 定义 装饰模式在书中的定义是&#xff1a;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更灵活。 这句话直接去理解可能会有点抽象&#…