【java11】java11新特性之标准HttpClient

Java 9中引入了增强的HttpClient API作为实验性功能。在Java 11中,现在HttpClient是一个标准。

Java 11引入了一个新的标准HttpClient API,用于替代旧的HttpURLConnection,提供了更现代、更灵活的HTTP通信方式。这个API支持同步和异步请求、WebSocket、HTTP/2等。

介绍

主要特点

  • 异步和流式处理:HttpClient支持异步请求和响应,有助于提高性能和效率。它还提供流式处理的能力,可以更有效地处理大量数据。
  • 可插拔的身份验证:HttpClient可以轻松实现各种身份验证机制,为应用程序提供更强的安全性。
  • 支持WebSocket:HttpClient支持WebSocket通信,使得在Java应用程序中实现实时通信变得更加容易。
  • 定制化:HttpClient允许用户根据需要自定义请求和响应的处理方式,提供更大的灵活性。
  • 支持HTTPS/TLS:HttpClient支持HTTPS协议和TLS加密,确保通信的安全性和隐私性。

主要组件

  • HttpClient:用于发送请求的主要类,可以通过HttpClient.newBuilder()方法构建。
  • HttpRequest:表示一个HTTP请求,可以设置请求方法(如GET、POST等)、请求头、请求体等。
  • HttpResponse:表示一个HTTP响应,包含响应状态码、响应头、响应体等信息。

使用方法

使用Java 11的HttpClient发送HTTP请求主要包括以下步骤:

  1. 创建一个HttpClient对象(可选地,可以通过HttpClient.newBuilder()方法进行配置)。
  2. 创建一个HttpRequest对象,并设置请求方法、请求头、请求体等。
  3. 使用HttpClient的send()方法发送请求,并获取HttpResponse对象。
  4. 处理HttpResponse对象,提取响应状态码、响应头、响应体等信息。

性能优势

  • 并发处理能力:HttpClient中的NIO模型、函数式编程、CompletableFuture异步回调和响应式流使其拥有极强的并发处理能力,性能极高。
  • 内存占用:相比其他HTTP客户端库,HttpClient的内存占用更少,适合处理大量并发请求。

使用

以下是HttpClient的一些基本使用示例:

创建HttpClient

可以使用HttpClient类创建一个HttpClient实例:

HttpClient client = HttpClient.newHttpClient();

也可以使用HttpClient.Builder类来构建一个HttpClient实例:

HttpClient.Builder builder = HttpClient.newBuilder();
builder.version(HttpClient.Version.HTTP_1_1);
HttpClient httpClient1 = builder.build();

发送同步GET请求

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Response status code: " + response.statusCode());
System.out.println("Response body: " + response.body());

发送异步GET请求

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).build();client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println);

发送POST请求

可以使用HttpRequest.BodyPublishers来发送请求体。

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).POST(HttpRequest.BodyPublishers.ofString("request body")).header("Content-Type", "application/json").build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Response status code: " + response.statusCode());
System.out.println("Response body: " + response.body());

处理响应体

可以使用不同的响应体处理器来处理HTTP响应。

HttpResponse<Path> response = client.send(request, HttpResponse.BodyHandlers.ofFile(Paths.get("response.txt")));
System.out.println("Response saved to file: " + response.body());

设置超时和重定向策略

可以自定义HttpClient的配置,例如超时和重定向策略。

HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).followRedirects(HttpClient.Redirect.NORMAL).build();HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println("Response status code: " + response.statusCode());
System.out.println("Response body: " + response.body());

使用HttpClient发送异步请求并处理结果

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).build();client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(body -> System.out.println("Response body: " + body)).join();

这些示例展示了如何使用Java 11中的标准HttpClient类来发送同步和异步HTTP请求,处理响应,并进行一些常见的配置。这使得HTTP通信变得更加简洁和现代化。

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

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

相关文章

Anacode+YOLO识别图片

一、安装Anacoda 因为我原本是已经安装了python&#xff0c;后面直接卸载了&#xff0c;然后安装了最新版的anacoda 下载网址为&#xff1a; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载版本是&#xff1a; 按照安装教程直接…

android framework input 及多指协议 (一)

触摸事件查询 getevent -lrt 以上数据格式&#xff1a;时间&#xff0c;具体节点文件名&#xff0c;事件类型&#xff0c;事件值 input问题排查&#xff0c;如果数据能打印出来&#xff0c;则是framework 问题&#xff0c;如果没有数据打印出来&#xff0c;则要看驱动问题。 …

80V高耐压低静态线性稳压器/LDO,Vout 1v-65v 3.3V及5V方案最佳选择

概述 PC93XX系列专为动力而设计-敏感应用程序。它包括一个精度第二个高压输入级&#xff0c;超低功率 偏置电流分支&#xff0c;并产生超低功率和低压差线性调节器。PC93XX通过输入电压工作VOUT1V至65V&#xff0c;仅消耗1.8μA的静态电流&#xff0c;并提供1%的初始精度和低…

kernelbase.dll故障怎么处理的几种常见方法,有效的解决kernelbase.dll故障

kernelbase.dll是 Windows 操作系统的一个系统文件&#xff0c;它是 Windows NT 基本 API 客户端库的一部分。如果你遇到了kernelbase.dll出现故障的情况&#xff0c;这可能会导致软件崩溃或无法正常运行。下面是一些处理kernelbase.dll故障的常见方法。 重新启动计算机&#x…

34. 【Java教程】反射

本小节我们来学习一个 Java 语言中较为深入的概念 —— 反射&#xff08;reflection&#xff09;&#xff0c;很多小伙伴即便参与了工作&#xff0c;可能也极少用到 Java 反射机制&#xff0c;但是如果你想要开发一个 web 框架&#xff0c;反射是不可或缺的知识点。本小节我们将…

机器视觉检测--光源

一&#xff0c;环形光源 较为常见的LED光源之一&#xff0c;提供基本的照明作用。 随着光源距离产品的工作距离LWD变化而产生的亮度分布&#xff0c;如下图暖色表示亮&#xff1b;冷色表示暗。 同时该图示是针对特定一款大小的环形光源的数据&#xff08;下同&#xff09;。 二…

酒店旅游API服务汇总

各大旅游平台常用API服务汇总&#xff1a; 实时房源服务【Airbnb】飞猪旅行开放服务途牛旅行开放平台API华为云数字差旅【差旅管理】动态信息接口【美团酒店】旅行商城商家管理API【马蜂窝】交易流程接口【美团酒店】电子导游【携程旅行】

设置docker容器开机自启动

前提&#xff0c;容器已经启动运行 必要性&#xff1a;每次服务器重启&#xff0c;相关容器也要启动&#xff0c;略显麻烦&#xff0c;可以设置开机启动&#xff0c;命令是 docker update nginx --restartalways update后面接容器名称或容器id&#xff0c;加上参数--restart…

在SpringBoot项目中连接mongodb5.0.11

目录 1、pom.xml 中引入依赖 2、在application.properties中配置连接mongodb数据库的配置数据 1、pom.xml 中引入依赖 <dependencies> ..... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-dat…

【MachineLearning】| 机器学习:推动未来技术革新与应用的新引擎

一、引言 随着计算能力的飞速提升和大数据的广泛应用&#xff0c;机器学习已成为推动现代科技发展的关键力量。从自动化驾驶到精准医疗&#xff0c;再到金融风险评估&#xff0c;机器学习正逐步改变着我们的工作和生活方式。本文将围绕机器学习的技术革新及其在不同领域的应用…

RenderNode Demo

目录 Demo一、帧绘制流程1、RenderProxy::syncAndDrawFrame2、DrawFrameTask::drawFrame3、CanvsContext::draw4、SkiaOpenGLPipeline::draw&#xff08;真正开始绘制&#xff09;5、RenderNodeDrawable::onDraw6、DisplayList::draw 二、RenderNode传递过程1、SkiaRecordingCa…

nginx动静分离配置

在实现nginx动静分离时&#xff0c;需要将静态文件和动态请求进行分离&#xff0c;可以通过以下配置实现&#xff1a; 1. 静态文件配置&#xff1a; location /static/ {root /path/to/static/files;expires 7d;access_log off; }location /media/ {root /path/to/media/file…

【Power Compiler手册】6.反标翻转活动

5.反标翻转活动 可以对设计中的切换活动进行反标,以生成准确的功耗计算。 有关不同类型切换活动信息以及如何在门级设计上进行反标的信息,请参阅以下主题: 反标切换活动的类型使用RTL SAIF文件反标切换活动使用门级SAIF文件反标切换活动反标推断的切换活动使用set_switchin…

TDMQ CKafka 版弹性存储能力重磅上线!

导语 自 2024年5月起&#xff0c;TDMQ CKafka 专业版支持弹性存储能力&#xff0c;这种产品形态下&#xff0c;存储可按需使用、按量付费&#xff0c;一方面降低消费即删除、存储使用波动大场景下的存储成本&#xff0c;另一方面存储空间理论上无穷大。 TDMQ CKafka 版产品能…

Python实用代码片段分享(三)

在今天的博文中&#xff0c;我们将继续分享一些Python编程中非常实用的代码片段。这些代码片段将帮助你更高效地处理常见任务&#xff0c;从字符转换到数据类型检查&#xff0c;应有尽有。 1. ord函数和chr函数 Python的ord()函数可以返回Unicode字符对应的ASCII码值&#xf…

OJ3260最大数组和问题

题目&#xff1a; 小明是一名勇敢的冒险家&#xff0c;他在一次探险途中发现了一组神秘的宝石&#xff0c;这些宝石的价值都不同。但是&#xff0c;他发现这些宝石会随着时间的推移逐渐失去价值&#xff0c;因此他必须在规定的次数内对它们进行处理。 小明想要最大化这些宝石的…

数据结构——二叉树(C语言版)

前言 二叉树是一种非线性的数据结构。二叉搜索树、堆、红黑树等高阶数据结构都是依托于二叉树的基础实现的&#xff0c;所以我们有必要好好研究一下“二叉树”这种数据结构。本文只介绍二叉树的基础及中等用法&#xff0c;笔者能力有限&#xff0c;欠妥当之处欢迎批评指正。 树…

【RS】哨兵系列新网站无法下载的问题及解决办法(Sentinel-2)

最近有些小伙伴留言说哨兵数据无法下载&#xff0c;网站打开后会有一层蒙版&#xff0c;无法选取研究区等信息&#xff0c;今天就跟大家分享一下如何解决这个问题。还知道如何下载的小伙伴可以移步到之前的文章&#xff1a;【RS】欧空局Sentinel-2卫星数据下载(哨兵1、2、3、5P…

海外短剧看剧系统搭建部署,h5/app双端,系统页面一键翻译功能,批量上传素材等功能。

目录 前言&#xff1a; 一、海外短剧系统有是吗功能&#xff1f; 二、海外短剧项目在海外反馈怎么样&#xff1f; 总结&#xff1a; 前言&#xff1a; 海外短剧系统搭建开发&#xff0c;想进军海外短剧市场的&#xff0c;搭建这样一款海外短剧系统是必要的。海外短剧市场规…

ATA-4051C高压功率放大器应用分享:超声波测量液位系统

超声波测量液位是一种非接触式液位测量方法&#xff0c;其原理是利用超声波的传播特性来测量液位。超声波是一种高频机械波&#xff0c;其频率高于人类能够听到的频率&#xff0c;通常在100kHz以上。超声波具有较好的穿透性和反射性&#xff0c;可以在固体、液体和气体中传播&a…