【java11】java11新特性之标准HttpClient

devtools/2024/9/25 11:15:57/

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实例:

java">HttpClient client = HttpClient.newHttpClient();

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

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

发送同步GET请求

java">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请求

java">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来发送请求体。

java">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响应。

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

设置超时和重定向策略

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

java">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发送异步请求并处理结果

java">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.ppmy.cn/devtools/46445.html

相关文章

数字塔问题

#include<iostream> using namespace std; //从下向上得到最优值 void dtower(int a[][100],int s[][100],int n) {for(int in; i>1; i--){for(int j1; j<i; j){if(in)s[i][j]a[i][j];else{int ts[i1][j];if(t<s[i1][j1])ts[i1][j1];s[i][j]a[i][j]t;}}} } void…

Python报错:AttributeError: <unknown>.DeliveryStore 获取Outlook邮箱时报错

目录 报错提示&#xff1a; 现象描述 代码解释&#xff1a; 原因分析&#xff1a; 报错提示&#xff1a; in get_outlook_email return account.DeliveryStore.DisplayName line 106, in <module> email_address get_outlook_email() 现象描述 获取outlook本地邮箱…

【Linux】自己实现一个bash进程

目录 读入用户输入 对字符串进行分割 处理内建命令 cd命令 export echo 处理重定向 代码汇总 bash就是命令行解释器&#xff0c;就是Linux操作系统让我们看到的&#xff0c;与用户进行交互的一种外壳&#xff08;shell&#xff09;&#xff0c;当然了bash也是一个进程&…

【稳定检索/投稿优惠】2024年商务、信息管理与大数据经济国际会议(BIMBDE 2024)

2024 International Conference on Business, Information Management, and Big Data Economy 2024年商务、信息管理与大数据经济国际会议 【会议信息】 会议简称&#xff1a;BIMBDE 2024 大会地点&#xff1a;中国北京 会议官网&#xff1a;www.bimbde.com 会议邮箱&#xff…

AI程序员来了,大批码农要失业

根据GitHub发布的《Octoverse 2021年度报告》&#xff0c;2021年中国有755万程序员&#xff0c;排名全球第二。 ChatGPT的出现&#xff0c;堪比在全球互联网行业点燃了一枚“核弹”&#xff0c;很多人都会担心“自己的工作会不会被AI取代”。 而2024年的AI进展速度如火箭般&am…

C#面:如果不用VisualStudio,用哪个命令行编译C#程序

可以使用命令提示符或者终端来执行编译命令 csc.exe 。 步骤&#xff1a; 打开命令提示符或终端。使用 cd 切换到 C# 程序所在的目录。使用以下命令来编译C#程序&#xff1a; 其中&#xff0c;是你的C#源代码文件的名称&#xff08;包括扩展名.cs&#xff09;。如果编译成功&…

IP地址开启HTTPS方法

可以使用IP地址申请SSL证书&#xff0c;申请之前必须是公网IP地址&#xff0c;不支持内网IP地址申请。 申请过程需要确定IP地址外网可以访问&#xff0c;这里特别注意只是申请过程中可以访问。访问验证过程必须采取80端口、443端口两者选择1个&#xff0c;不可以用其它端口进行…

完全指南:C语言学习资源汇总

C语言是编程学习的基石&#xff0c;无论是为了职业发展还是个人兴趣&#xff0c;掌握C语言都是技术生涯的重要一步。为了帮助初学者和有经验的程序员更好地学习和深化对C语言的理解&#xff0c;我们汇总了一系列优秀的书籍和在线资源。这些资源将帮助你从基础知识到高级概念&am…