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

news/2024/9/22 12:33:05/
http://www.w3.org/2000/svg" style="display: none;">

目录

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

HttpClient-快速理解&入门

1. 需求

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

像这样:

https://img-blog.csdnimg.cn/direct/1bf10508ae58437e933164620a0e4849.png#pic_center" alt="Alt" />

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

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

常见的应用场景如下:

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

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

https://img-blog.csdnimg.cn/direct/d0689caf82d2412f9ebce2b739601808.png#pic_center" alt="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

    java">@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令牌,注意这里要设置请求的编码方式和请求体的数据格式,、。

    java">@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.ppmy.cn/news/1434798.html

相关文章

同旺科技 USB TO SPI / I2C适配器读写24LC128--读写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC128芯片&#xff1b; 适应于同旺科技 USB TO SPI / I2C适配器专业版&#xff1b; 专业版配套软件更新&#xff1b; 直接读取HEX文件&#xff0c;自动完成文件解析&#xff1b; 支持芯片&#xf…

常见的加密方式都有哪些

加密方式有多种类型&#xff0c;包括对称加密、非对称加密和哈希函数。以下是它们的主要类型&#xff1a; 对称加密&#xff1a; 对称加密使用相同的密钥进行加密和解密。常见的对称加密算法包括&#xff1a;DES、3DES、AES、RC4 等。 非对称加密&#xff1a; 非对称加密使用一…

EPC在新能源光伏电站的优势和功能流程

EPC在新能源光伏电站的优势和功能流程 EPC 是指公司受业主委托&#xff0c;按照合同约定对工程建设项目的设计、采购、施工、试运行等实行全过程或若干阶段的承包。通常公司在总价合同条件下&#xff0c;对其所承包工程的质量、安全、费用和进度进行负责&#xff0c;在EPC模式…

基于Springboot的网课管理系统

基于SpringbootVue的网课管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 课程表 论坛交流 学校公告 后端 学生管理 教师管理 班级管理 课程分类管理…

XiaodiSec day024 Learn Note 小迪安全学习笔记

XiaodiSec day024 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 day24 sql injection 知识点 脚本代码与数据库前置只是 access 数据库注入 mysql 数据库注入 前置知识 开始 数据库类型不同&#xff0c;流程会不同 access 和 asp 目前使用量较少&a…

闲话 ASP.NET Core 数据校验(一):内置数据校验

前言 所谓输入的是垃圾&#xff0c;输出也必然是垃圾&#xff0c;有多少安全问题隐藏在请求的数据中&#xff0c;所以永远不能相信来自用户端的输入。 对请求数据的合法性进行校验&#xff0c;不仅有助于提升用户界面的友好性&#xff0c;而且有助于提高后台程序的安全性和稳…

华火电燃灶:重拾烹饪艺术的黄金法则,打造家庭美食的温馨记忆

记得在饭店给客户人炒菜的时候&#xff0c;炉灶下的每一道菜都透着诱人的香气。无论是炒肉还是炖汤&#xff0c;那股鲜香总让人回味无穷。然而&#xff0c;回到家&#xff0c;用上自家的燃气灶&#xff0c;发现同样的食材、同样的配方&#xff0c;味道却平淡无奇&#xff0c;仿…

c# 值类型和引用类型的区别

在C#中&#xff0c;值类型&#xff08;Value Types&#xff09;和引用类型&#xff08;Reference Types&#xff09;是两种基本的数据类型分类&#xff0c;它们在内存管理、赋值方式、参数传递以及默认值等方面有着本质的区别。 1. 内存存储位置 值类型&#xff1a;存储在栈&…