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

HttpClient学习

目录

一、概述 

二、HttpClient依赖介绍 

1.导入HttpClient4依赖 

2.或者导入HttpClient5依赖

3.二者区别

三、HttpClient发送Get请求和Post请求测试 

(一)通过HttpClient发送Get请求

 (二)通过HttpClient发送Post请求 


一、概述 

        HttpClient是 Apache 软件基金会提供的一个用于 Java 应用程序的 HTTP 协议访问库。它提供了强大的功能来处理 HTTP 请求和响应,支持同步和异步通信、连接池管理、cookie管理、SSL/TLS加密等特性。从Java 11开始,标准Java库中也引入了一个新的HttpClient实现,这为开发者提供了原生的支持。 

核心API

HttpClient

HttpClients

CloseableHttpClient

HttpGet

HttpPost

发送请求步骤:

创建HttpClient对象

创建Http请求对象

调用HttpClientexecute方法发送请求

二、HttpClient依赖介绍 

1.导入HttpClient4依赖 

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>

依赖说明:

  • 第四代HttpClient:这是HttpClient的一个较老但仍然广泛使用的版本,被称为HttpClient 4。尽管它没有HttpClient 5中的一些现代化特性,但它非常稳定,并且有大量的文档和支持。
  • 特点
    • 提供了丰富的功能集来处理各种HTTP操作。
    • 广泛应用于现有的许多Java应用程序中。
    • 良好的向后兼容性。
  • 维护状态:虽然官方仍在为该版本提供关键的安全修复,但它已进入维护模式,意味着主要的新功能开发已经转向HttpClient 5。 

        另外,如果你的项目中使用了阿里云OSS对象存储,那么上面的依赖不需要导入,因为阿里云OSS依赖底层调用的就是HttpClient

 

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

2.或者导入HttpClient5依赖

<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.2.1</version> <!-- 确保使用最新版本 -->
</dependency>

依赖说明 

  • 第五代HttpClient:这是Apache HttpClient项目的最新一代,通常称为HttpClient 5。它旨在提供改进的性能、更好的异步支持和更现代的API。
  • 新特性与改进
    • 支持HTTP/2。
    • 更好的异步请求处理能力。
    • 改进的连接管理和资源管理。
    • 更清晰的API设计,便于理解和使用。
  • 维护状态:这是一个活跃开发中的版本,推荐用于新的项目或者需要利用其新增特性的场景。 

3.二者区别

主要区别

  • 版本差异:最显著的区别在于一个是第5代(5.x),另一个是第4代(4.x)产品线。
  • 功能集:HttpClient 5引入了许多新特性,如对HTTP/2的支持,改进的异步API等,而HttpClient 4则侧重于稳定性和广泛的现有应用支持。
  • API设计:HttpClient 5提供了更新、更简洁的API设计,而HttpClient 4的API虽然也很强大,但在某些方面可能显得稍微陈旧一些。
  • 未来方向:HttpClient 5代表了这个库的未来发展方向,而HttpClient 4主要是为了支持现有的用户群并确保稳定性。

如何选择

  • 如果你在启动一个新项目或希望利用最新的HTTP协议特性和改进的API设计,那么应该考虑使用HttpClient 5。
  • 如果你的项目依赖于大量的HttpClient 4代码,或者你需要保持与现有系统的一致性,那么继续使用HttpClient 4可能是更安全的选择。

        注意:同时包含这两个依赖可能会导致类冲突或其他兼容性问题,因此建议根据具体情况仅选择其中一个版本使用。如果决定迁移至HttpClient 5,请确保测试所有相关功能以保证兼容性。 

三、HttpClient发送Get请求和Post请求测试 

这里使用的是JDK8,并且引入了阿里云OSS对象存储

(一)通过HttpClient发送Get请求

@Test
public void testGet() throws Exception {// 1. 创建HttpGet对象,设置请求的url地址CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");// 2. 使用HttpClient对象执行请求,得到一个HttpResponse对象CloseableHttpResponse response = httpClient.execute(httpGet);// 3. 获取响应状态码int statusCode = response.getStatusLine().getStatusCode();System.out.println("statusCode = " + statusCode);// 4. 从HttpResponse对象中获取响应体HttpEntity entity = response.getEntity();String body = EntityUtils.toString(entity);System.out.println("body = " + body);// 4. 关闭HttpClient对象response.close();httpClient.close();
}

运行结果: 

statusCode = 200
body = {"code":1,"msg":null,"data":1}

 (二)通过HttpClient发送Post请求 

@Test
public void testPost() throws Exception {// 1. 创建HttpGet对象,设置请求的url地址CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");// 2.设置请求体JSONObject jsonObject = new JSONObject();jsonObject.put("username","admin");jsonObject.put("password","123456");String body = jsonObject.toJSONString();StringEntity entity = new StringEntity(body);httpPost.setEntity(entity);// 3.设置请求体编码格式entity.setContentEncoding("UTF-8");entity.setContentType("application/json");httpPost.setEntity(entity);// 4.发送请求CloseableHttpResponse response = httpClient.execute(httpPost);// 5.获取响应状态码int statusCode = response.getStatusLine().getStatusCode();System.out.println("statusCode = " + statusCode);// 6.获取响应体HttpEntity httpEntity = response.getEntity();String result = EntityUtils.toString(httpEntity);System.out.println("result = " + result);// 7.关闭资源response.close();httpClient.close();
}

运行结果: 

statusCode = 200
result = {"code":1,"msg":null,
"data":{"id":1,"userName":"admin","name":"管理员",
"token":"eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzQ1MDg0MTQyfQ._BFIF6qOdhSf8ML17fYHwnvnAXgl0Y9SAYhC2ehplTs"}}

相关文章:

HttpClient学习

目录 一、概述 二、HttpClient依赖介绍 1.导入HttpClient4依赖 2.或者导入HttpClient5依赖 3.二者区别 三、HttpClient发送Get请求和Post请求测试 (一)通过HttpClient发送Get请求 (二)通过HttpClient发送Post请求 一、概述 HttpClient是 Apache 软件基金会提供的一…...

二级 二维数组3

对角线之和 题目描述 输入一个矩阵&#xff0c;输出右上-左下对角线上的数字和 输入 输入1个整数N。(N<10)表示矩阵有n行n列 输出 对角线的和 样例 输入复制 4 1 2 3 4 2 3 4 5 4 5 6 7 1 2 3 4 输出复制 14 #include<iostream> using namespace std; int main() {i…...

【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM

参考&#xff1a; https://www.youtube.com/watch?veC6Hd1hFvos 目录&#xff1a; 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …...

javascript-es6 (一)

作用域&#xff08;scope&#xff09; 规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问 局部作用域 函数作用域&#xff1a; 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问 function getSum(){ //函数内部是函数作用…...

数据结构——二叉树——堆(1)

今天&#xff0c;我们来写一篇关于数据结构的二叉树的知识。 在学习真正的二叉树之前&#xff0c;我们必不可少的先了解一下二叉树的相关概念。 一&#xff1a;树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层…...

window保存好看的桌面壁纸

1、按下【WINR】快捷键调出“运行”窗口&#xff0c;输入以下命令后回车。 %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 2、依次点击【查看】【显示】&#xff0c;勾选【隐藏的项目】&#xff0c;然后按【CtrlA】全部…...

docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜像…...

98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用

目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…...

【自然语言处理(NLP)】长短期记忆网络(Long - Short Term Memory,LSTM)原理和代码实现(从零实现、Pytorch实现)

文章目录 介绍长短期记忆网络&#xff08;Long - Short Term Memory&#xff0c;LSTM&#xff09;结构原理候选记忆元符号含义公式含义 记忆元符号含义公式含义 隐状态符号含义公式含义 特点应用实现 LSTMpytorch实现 个人主页&#xff1a;道友老李 欢迎加入社区&#xff1a;道…...

八股学习 微服务篇

微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件&#xff1a; Eureka/Nacos:注册中心&#xff1b;Ribbon:负载均衡&#xff1b;Feign:远程调用&#xff1b;Hystrix/Sentinel:服…...

TCP协议:互联网数据传输的守护者

在互联网的浩瀚海洋中&#xff0c;数据如同涓涓细流&#xff0c;无时无刻不在流动。而这些数据的稳定、可靠传输&#xff0c;离不开一个重要的协议——TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;。TCP协议作为互联网协议族中的核心成员…...

协助工具-任意门导航

任意门导航网址&#xff1a;随意门导航-最全的实用导航网站,好用简洁宝藏网址神器...

【MCAL实战】MCU模块配置实践

目录 前言 正文 1.硬件分析 1.1 MCU系统模式分析 1.2MCU晶振使用分析 2.MCU通用配置 2.1 McuGeneralConfiguration 2.2 McuModuleConfiguration 2.3 McuResetSettingConf 2.4 McuTrapSettingConf 2.4 其他 3.MCU模式配置 3.1 McuModeSettingConf_0 3.2 McuModeSe…...

OpenAI 发布首个 AI 智能体

OpenAI 发布首个 AI 智能体 当地时间 1 月 23 日&#xff0c;OpenAI 发布了首个 AI 智能体 Operator124。以下是关于它的详细介绍2&#xff1a; 功能用途 操作网页&#xff1a;可模拟人类操作网页浏览器&#xff0c;能进行点击、滚动、输入等操作&#xff0c;例如在 OpenTable…...

【Python】导入类

随着不断给类添加功能&#xff0c;文件可能变得很长&#xff0c;即便妥善地使用了继承亦如此。为遵循Python的总体理念&#xff0c;应让文件尽可能整洁。 Python在这方面提供了帮助&#xff0c;允许将类存储在模块中&#xff0c;然后在主程序中导入所需的模块。 导入单个类 下…...

Deepseek实现本地电影文件批量重命名为infuse格式,可匹配IMDB

import os from openai import OpenAI# 初始化DeepSeek客户端 client OpenAI(api_key"<DeepSeek API Key>", base_url"https://api.deepseek.com")def parse_filename_with_deepseek(filename):"""使用DeepSeek API解析文件名并生成…...

Nginx部署的前端项目刷新404问题

1&#xff0c;查看问题 我部署的81端口是监听tlias项目的&#xff0c;我直接访问端口页面可以出现内容。 我在浏览器舒服端口之后回车&#xff0c;会重定向页面。但是我在重定向之后的页面刷新浏览器就会出现404的问题。 下面是刷新浏览器后的效果 2&#xff0c;在nginx.cnf …...

Boot 系统选择U启动

1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...

XSLT 编辑 XML:深度解析与实际应用

XSLT 编辑 XML&#xff1a;深度解析与实际应用 引言 XML&#xff08;可扩展标记语言&#xff09;和XSLT&#xff08;可扩展样式表语言转换&#xff09;是处理和转换XML数据的重要工具。本文将深入探讨XSLT在编辑XML文档中的应用&#xff0c;包括其基本概念、语法结构、以及实…...

项目文章 | PNAS 斑马鱼转录因子ChIP-seq助力解析GATA6突变相关的肝脏疾病机制

近日&#xff0c;西南大学阮华/黄红辉团队联合重庆大学邱菊辉/王贵学团队在PNAS发表了题为“An animal model recapitulates human hepatic diseases associated with GATA6 mutations”的研究论文。该研究构建了一个gata6敲除斑马鱼模型&#xff0c;它重现了gata6突变患者的大…...

easyexcel-导入(读取)(read)-示例及核心部件

文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象&#xff0c;new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...

作业day3

请使用dup2 fgets printf 实现文件拷贝功能、 文件1&#xff1a; 复后文件&#xff1a; #define BUFFER_SIZE 1024 void file_copy(const char* src_file, const char* dest_file) { int src_fd, dest_fd; char buffer[BUFFER_SIZE]; // 打开源文件 src_fd open(s…...

第五节 MATLAB命令

本节的内容将提供常用的一些MATLAB命令。 在之前的篇章中我们已经知道了MATLAB数值计算和数据可视化是一个交互式程序&#xff0c;在它的命令窗口中您可以在MATLAB提示符“>>”下键入命令。 MATLAB管理会话的命令 MATLAB提供管理会话的各种命令。如下表所示&#xff1a;…...

Oracle 普通用户连接hang住处理方法

一、现象说明 $ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 16:49:19 2024 Version 19.11.0.0.0Copyright (c) 1982, 2020, Oracle. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Pro…...

理解C++中的右值引用

右值引用&#xff0c;顾名思义&#xff0c;就是对一个右值进行引用&#xff0c;或者说给右值一个别名。右值引用的规则和左值一用一模一样&#xff0c;都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样&#xff0c;在定义的同时必须立即赋值&#xff0c;如果不立即赋…...

02-机器学习-核心概念

以下是机器学习核心概念的详细梳理。 1. 机器学习三大范式 类型定义典型应用监督学习使用带标签的数据训练模型&#xff0c;预测未知数据的标签。分类&#xff08;邮件垃圾过滤&#xff09;、回归&#xff08;房价预测&#xff09;无监督学习从无标签的数据中发现隐藏模式或结…...

1.26 实现文件拷贝的功能

使用dup2fgetsprintf实现文件拷贝的功能。 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #in…...

ES6+新特性,var、let 和 const 的区别

在 JavaScript 中&#xff0c;var、let 和 const 都用于声明变量&#xff0c;但它们有一些重要的区别&#xff0c;主要体现在 作用域、可变性和提升机制 等方面。 1. 作用域&#xff08;Scope&#xff09; var: var 声明的变量是 函数作用域&#xff0c;也就是说&#xff0c;它…...

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架&#xff0c;通过多层次的开放能力提供统一接入标准&#xff0c;实现三方框架快速…...

嵌入式C语言:结构体对齐

目录 一、对齐的原因 1.1. 硬件访问效率 1.2. 内存管理简化 1.3. 编译器优化 1.4. 代码示例 二、对齐规则 2.1. 基本数据类型对齐 2.2. 结构体成员对齐 2.3. 结构体整体对齐 2.4. 代码示例 三、对齐控制 3.1. 使用 #pragma pack 3.2. 使用 __attribute__((packed)…...