【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通信变得更加简洁和现代化。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

morris131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值