HttpClient入门介绍

news2024/11/17 1:48:47

 介绍

介绍

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

作用:
  • 发送HTTP请求

  • 接收响应数据

应用场景:

当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时

 其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。

HttpClient的maven坐标:<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
HttpClient的核心API:
  • HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。

  • HttpClients:可认为是构建器,可创建HttpClient对象。

  • CloseableHttpClient:实现类,实现了HttpClient接口。

  • HttpGet:Get方式请求类型。

  • HttpPost:Post方式请求类型。

HttpClient发送请求步骤:
  • 创建HttpClient对象

  • 创建Http请求对象

  • 调用HttpClient的execute方法发送请求

  • 解析请求结果

  • 释放资源

 入门案例

使用HttpClient在Java程序当中来构造Http的请求,并且把请求发送出去,接下来,就通过入门案例分别发送GET请求POST请求,具体来学习一下它的使用方法。

GET方式请求

正常来说,首先,应该导入HttpClient相关的坐标,但在项目中,就算不导入,也可以使用相关的API。

因为在项目中已经引入了aliyun-sdk-oss坐标:

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
</dependency>

上述依赖的底层已经包含了HttpClient相关依赖。

 故选择导入或者不导入均可。

实现步骤:
  1. 创建HttpClient对象

  2. 创建请求对象

  3. 发送请求,接受响应结果

  4. 解析结果

  5. 关闭资源

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
//throws关键字对外声明该方法有可能发生异常,这样调用者在调用方法时,
//就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。
@SpringBootTest
public class HttpClientTest {
    /**
     * 测试通过httpClient方式发送的请求
     * @throws Exception
     */
    @Test
    public void testGet() throws Exception{
        //创建httpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //创建请求对象
        HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");
        //发送请求,接受响应结果
        CloseableHttpResponse response = httpClient.execute(httpGet);
        //获取服务端返回的转态码
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println(statusCode);

        HttpEntity entity = response.getEntity();
        String body = EntityUtils.toString(entity);
        System.out.println("服务端返回的数据为:" + body);
        //关闭资源
        response.close();
        httpClient.close();
    }
}

在访问http://localhost:8080/user/shop/status请求时,需要提前启动项目。

测试结果:

 POST方式请

在HttpClientTest中添加POST方式请求方法,相比GET请求来说,

POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。

实现步骤
  1. 创建HttpClient对象

  2. 创建请求对象

  3. 发送请求,接收响应结果

  4. 解析响应结果

  5. 关闭资源

     /**
     * 测试通过httpclient发送的请求
     */
    @Test
    public void testPost() throws Exception {
        //创建httpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //创建请求对象
        HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username","admin");
        jsonObject.put("password","123456");
        StringEntity entity = new StringEntity(jsonObject.toString());
        //指定请求编码方式
        entity.setContentEncoding("utf-8");
        //数据格式
        entity.setContentType("application/json");
        httpPost.setEntity(entity);
        //发送请求
        CloseableHttpResponse response = httpClient.execute(httpPost);
        //解析返回结果
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println(statusCode);
        HttpEntity entity1 = response.getEntity();
        String body = EntityUtils.toString(entity1);
        System.out.println("响应数据为:" + body);
        //关闭资源
        response.close();
        httpClient.close();
    }
}
测试

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

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

相关文章

Unreal Engine11:触发器和计时器的使用

写在前面 主要是介绍一下触发器和计时器的使用&#xff1b; 一、在Actor中使用触发器 1. 新建一个C类 创建的C类也是放在Source文件夹中的Public和Private文件夹中&#xff1b;选择Actor作为继承的父类&#xff1b;头文件包括一个触发器和两个静态网格&#xff0c;它们共同…

基于SpringBoot,vue的家政服务平台的设计与实现

背景 以往的家政服务管理平台的管理&#xff0c;一般都是纸质文件来管理家政服务信息&#xff0c;传统的管理方式已经无法满足现代人们的需求&#xff1b;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索&#xff0c;只需输入家政服务相关信息就能在数秒内反馈想要的…

真题详解(哈希冲突)-软件设计(七十)

真题详解(3FN)-软件设计&#xff08;六十九)https://blog.csdn.net/ke1ying/article/details/130548812 在以阶段划分的编译器&#xff0c;____阶段的主要作用是分析构成程序的字符及由字符构造规则构成的符号是否复合程序语言的规定。 词法分析 B.语法分析 C.语义分析 D.代码…

Linux 文件系统原理 / 虚拟文件系统VFS

Linux 文件系统原理 / 虚拟文件系统VFS 虚拟文件系统 VFSVFS 定义VFS 的对象演绎超级块 super_block索引节点 inode目录项 dentry文件 file 打开文件流程参考文献 虚拟文件系统 VFS VFS 定义 VFS是一个抽象层&#xff0c;其向上提供了统一的文件访问接口&#xff0c;而向下则…

深度学习笔记之卷积神经网络(二)图像卷积操作与卷积神经网络

深度学习笔记之卷积神经网络——图像卷积操作与卷积神经网络 引言回顾&#xff1a;图像卷积操作补充&#xff1a;卷积核不是卷积函数 卷积神经网络卷积如何实现特征描述/提取卷积神经网络中的卷积核的反向传播过程场景构建与前馈计算卷积层关于卷积核的反向传播过程卷积层关于输…

《花雕学AI》新版必应 Bing 登场:轻松注册,一站式搜索、聊天与绘画应有尽有

引言&#xff1a; 你是否曾经在网上搜索信息时感到困惑或沮丧&#xff1f;你是否曾经想要在网上创造一些有趣或有用的内容&#xff0c;却不知道从何开始&#xff1f;你是否曾经想要用文字描述一个图像&#xff0c;却无法找到合适的图片&#xff1f;如果你的答案是肯定的&#x…

ChatGPT将抢占谁的工作,未来如何应对

“AI人工智能领域里程碑式应用” ChatGPT影响力已经越来越大&#xff0c;激起大家强烈好奇心的同时&#xff0c;也让一些人发出了“感觉自己快要失业了”的焦虑&#xff0c;今天先说一下哪些人的工作会受到 ChatGPT等AI人工智能影响 从工业时代到数字时代这100多年的发展历程来…

【华为机试】——HJ4 字符串分隔

【华为机试】——HJ5 进制转换&#x1f60e; 前言&#x1f64c;HJ4 字符串分隔方法一&#xff1a;巧用scanf的输入格式方法二&#xff1a;循环分解思想 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上…

泛型的特点和深浅拷贝的区别以及不相等对象的hashcode值的问题

永远都不为自己选择的道路而后悔&#xff0c;人生如同坐火车&#xff0c;风景再美也会后退&#xff0c;流逝的时间和邂逅的人终会渐行渐远&#xff0c;前行的始终是自己 泛型常用特点 泛型是JavaSE1.5之后的特性&#xff0c;《Java核心技术》中对泛型的定义是&#xff1a; “…

数据血缘分析工具SQLFLow自动画出数据库的 ER 模型

马哈鱼数据血缘分析器通过分析你所提供的 SQL 脚本&#xff0c;或者连接到数据库&#xff0c;可以自动画出数据库的 ER 模型&#xff0c;可视化表和字段的关系&#xff0c;帮助你迅速了解数据库的设计模型&#xff0c;进行高效的团队沟通。 马哈鱼通过两种途径来为你自动可视化…

MySQL中使用delete_at(时间戳)作为逻辑删除标记时如何使用MyBatis-Plus逻辑删除组件插入时间戳,以及如何解决自动填充失效的问题

背景 MySQL中使用delete_at&#xff08;时间戳&#xff09;作为逻辑删除标记 在业务中&#xff0c;使用逻辑删除是普遍做法&#xff0c;通常会使用一个名为deleted&#xff08;0/1&#xff09;的字段表示删除状态。 但是如果遇到有唯一约束&#xff0c;且可能反复删除和重新…

chatgpt如何引入本地知识?我们来看下emnlp 2022如何将本地图谱知识引入到任务型对话系统中

一、概述 title&#xff1a;Injecting Domain Knowledge in Language Models for Task-Oriented Dialogue Systems 论文地址&#xff1a;https://arxiv.org/abs/2212.08120 代码&#xff1a;GitHub - amazon-science/domain-knowledge-injection 1.1 Motivation 如何在PLM…

SIFT描述子实现

参考&#xff1a;SIFT图像匹配原理及python实现&#xff08;源码实现及基于opencv实现&#xff09; #include <iostream> #include <opencv2/opencv.hpp> #define _USE_MATH_DEFINES #include <math.h> #include <numeric>float mod_float(float x, f…

YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析

前言 最近我在研究YOLOv5的改进&#xff0c;一个模型的好坏、改进后效果如何都是需要一系列指标来判断的。这篇就是我将这几天学到的内容做一下总结。 友情提醒&#xff1a;本篇干货较多&#xff0c;建议先再慢慢看噢&#xff01; ​ &#x1f340;本人YOLOv5源码详解系列&…

大规模并行处理架构Doris入门操作

目录 1 基本概念1.1 Row & Column1.2 Tablet & Partition 2 创建用户2.1 创建数据库并赋予权限2.2 Doris 建表、数据导入与删除 3 建表&#xff08;Create Table&#xff09;3.1 字段类型3.2 数据划分3.3 关于 Partition 和 Bucket 的数量和数据量的建议3.4 演示单分区…

UML状态图详解

上篇文章&#xff0c;介绍了UML的基础知识&#xff0c;并详细介绍了UML中类图的知识点与画法。 本篇&#xff0c;来继续介绍UML中的另一种图——状态图。 1 UML状态图简介 状态图&#xff0c;显示一个状态机&#xff0c;属于UML活动图。 UML具有许多不同类型的图表&#xff…

<代码分享> 分支定界算法的 Python 代码框架

本文以求解整数规划模型为例&#xff0c;提供分支定界算法的 Python 代码框架&#xff0c;期待完善、指正和交流。 文件结构 具体代码 problem.py 定义问题的格式&#xff1a; from typing import Listclass Problem(object):"""problem"""de…

OneAPI 编译cp2k 9.1和cp2k 2023.1

环境信息&#xff1a; Rocky Linux 8.6 Linux server 4.18.0-425.19.2.el8_7.x86_64 gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC) OneAPI 2023 Intel(R) oneAPI DPC/C Compiler 2023.0.0 (2023.0.0.20221201) ifort version 2021.8.0 一、编译cp2k 9.1 这里用的…

linux系统下常用软件的安装与操作实现

本文来介绍下如何在 Linux 上安装 Windows 上常用的软件&#xff0c;桌面更多的用的是 Ubuntu &#xff0c;下面就以 Ubuntu 为例。 目录 一、安装环境 二、安装步骤 三、总结 一、安装环境 本文使用的安装环境&#xff0c;如下所示&#xff1a; linuxylinuxy:~$ cat /proc…

【Python】【进阶篇】25、Django for标签详解

目录 25、Django for标签详解1. for标签的使用2. for标签嵌套使用3. forloop变量详解 25、Django for标签详解 通过上一节的《Django if标签详解》的讲解&#xff0c;我相信大家对于模板标签已经不再陌生&#xff0c;在本节我们再给大家隆重介绍一位最熟悉的陌生人&#xff0c…