【苍穹外卖】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

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

    @Test
        void testPost() throws Exception {
            //获取httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
    
            //url地址
            String url = "http://localhost:8080/admin/employee/login";
    
            //获取HttpPost对象
            HttpPost httpPost = new HttpPost(url);
    
    
            //模拟请求体数据--数据格式为json
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("username", "admin");
            jsonObject.put("password", "123456");
    
            //设置请求体参数对象-这里HttpEntity的实现类-StringEntity
            StringEntity 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 可能会有不同的特性和行为,导致在不同环境下出现兼容性问题,需要进行额外的测试和处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV杂记(2):图像拼接(hconcat, vconcat)

OpenCV杂记&#xff08;1&#xff09;&#xff1a;绘制OSD&#xff08;cv::getTextSize, cv::putText&#xff09;https://blog.csdn.net/tecsai/article/details/137872058 1. 简述 做图像处理或计算机视觉技术的同学都知道&#xff0c;我们在工作中会经常遇到需要将两幅图像拼…

Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内

问题描述 轨迹数据判断是否经过打卡点&#xff0c;轨迹数据太多&#xff0c;循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线&#xff0c;然后只需要循环打卡点即可&#xff0c;打卡点不多&#xff0c;一般不会超过100个&#xff0c;如果多的话&#x…

苹果手机远程打卡教程

关于苹果手机远程打卡教程之——有电脑零成本版 &#x1f4ce;个人主页&#xff1a;我的主页 &#x1f4ce;小白一枚&#xff0c;欢迎指教&#x1f44f; 嗨嗨嗨&#xff0c;今天来出一期iPhone实现远程打卡的教程&#xff0c;让我们可以随时随地的打卡wherever&#xff5e; 准…

shell进阶之正则表达式:字符转义(十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标。 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 打包 依据不一样的需求&#xff0c; 详情请查看 https://docs.qq.com/sheet/DUEdqZ2l…

在windows系统中安装kafka配置全步骤记录

在windows系统中安装kafka配置全步骤记录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可…

软考高级架构师:AI 通俗讲解负载测试、压力测试、强度测试、容量测试和可靠性测试

在软件工程领域&#xff0c;测试是一个确保软件质量和性能的关键步骤。负载测试、压力测试、强度测试、容量测试和可靠性测试都是性能测试的不同类型&#xff0c;它们的目的和方法有所不同。 下面我将通过简单的比喻和解释&#xff0c;帮助您理解这些测试之间的区别。 负载测试…

Vue阶段练习:tab栏、进度条、

阶段练习旨在学习完Vue 指令、计算属性、侦听器-CSDN博客后&#xff0c;进行自我检测&#xff0c;每个练习分为效果显示、需求分析、静态代码、完整代码、总结 四个部分&#xff0c;效果显示和准备代码已给出&#xff0c;我们需要完成“完整代码”部分。 练习1&#xff1a;tab栏…

3Darray 修改array值然后保存图片

from PIL import Image import numpy as np img_path ./000001.jpg # 读取图片 image Image.open(img_path) width, height image.size print("图片的宽度为{},高度为{}".format(width,height)) print("图片的mode为{}".format(image.mode)) print(&quo…

arm编译、u-boot编译过程、linux内核编译

arm编译 我们之前在linux编译时使用gcc就行,但是在arm中我们需使用arm-linux-gcc 我们需安装交叉编译工具,地址就在119行 若没有,可自行在网上下载 u-boot编译过程 u-boot作为开源项目,可在其官网下载源码,官网 但在实际开发过程中,我们不会直接去u-boot官网下载源码…

STM32F103ZET6 封装 LQFP-144 ST意法 单片机芯片

STM32F103ZET6 是意法半导体&#xff08;STMicroelectronics&#xff09;生产的一款基于 ARM Cortex-M3 内核的 32 位微控制器。它具有高性能、低功耗的特点&#xff0c;广泛应用于各种嵌入式系统和工业应用中。STM32F103ZET6 的主要特点如下&#xff1a; 内核&#xff1a;ARM…

QA测试开发工程师面试题满分问答19: url请求到响应整个过程,涉及到什么技术细节

概述 当你点击鼠标发起一个请求&#xff0c;直到页面显示响应数据&#xff0c;整个过程可以详细展开为以下步骤&#xff1a; 用户点击鼠标&#xff1a;用户在浏览器中点击某个链接或按钮&#xff0c;触发请求的发起。 URL 解析&#xff1a;浏览器解析点击的链接中的 URL&…

力扣数据库题库学习

577. 员工奖金 问题链接 思路分析 Employee表与Bonus表通过empId字段可以连接&#xff0c;需求是查出奖金少于1000的员工名和奖金值。 这里奖金少于1000的情况就是没有奖金有奖金但少于1000 这里我给出的解决方案就是使用左连接&#xff0c;将Employee表作为左表&#xff…

LoRa-Kit 开发板使用介绍

文章目录 前言一、准备二、连接1. 将Ra-03SCH模组焊接到转接板上2. 将转接板插到开发板上3. 将ST-Link v2烧录器与开发板连接4. 将ST-Link v2烧录器和开发板连接到电脑 三、烧录1. 打开STM32烧录工具2. 连接开发板 四、使用步骤1. 打开串口调试助手2. 按下复位键后模组绿色指示…

医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。 在医学影像中,噪声可能来源于多个方面,包括成像设备的电子系统、患…

使用Jest测试框架测试JS项目

前言 JavaScript的测试框架有很多&#xff0c;这里主要记录一些自己在初次使用jest时遇到的一些问题。详细使用文档可以参照官方说明文档。 简介 Jest 是一款优雅、简洁的 JavaScript 测试框架。 Jest 支持 Babel、TypeScript、Node、React、Angular、Vue 等诸多框架&#…

使用LVGL提升交互效率:基于启明智显Model3A方案的7寸智能屏用户界面(UI)设计介绍

项目概述&#xff1a; 【启明智显】&#xff0c;作为一家专注于HMI和AIoT解决方案的公司&#xff0c;我们致力于为用户提供创新、可靠且高效的产品和解决方案。近日我们推出了高性能及高性价比的HMI芯片——Model3A。芯片搭载了强大的2D图形加速引擎&#xff0c;能够提供高达7…

Redis入门到通关之Redis数据结构-Hash篇

文章目录 ☃️ 概述☃️底层实现☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后…

书生·浦语大模型-第四节课笔记/作业

笔记 作业 xtuner train ./config/internlm2_chat_7b_qlora_alpaca_e3_copy.py --work-dir ./train微调前效果 微调后效果 微调过程-transformer-lora

C代码求 MD5 值

MD5值常被用于验证数据的完整性&#xff0c;嵌入式开发时经常用到。md5sum命令可以求MD5码&#xff0c;下面介绍如何用C语言实现MD5功能。 一、求字符串MD5值 1、md5sum命令 $ echo -n "12345678" | md5sum //获取"12345678"字符串的md5值 结果&…