📜  Java 9 的 HTTP2 客户端特性和示例(1)

📅  最后修改于: 2023-12-03 14:42:12.721000             🧑  作者: Mango

Java 9 的 HTTP2 客户端特性和示例

Java 9 引入了新的 HTTP2 客户端 API,为开发人员提供了更好的网络编程体验。本文将介绍Java 9的HTTP2 客户端的特性,并提供一个简单的示例。

特性

Java 9 的 HTTP2 客户端 API 提供以下特性:

  • 支持 HTTP/1.1 和 HTTP/2 协议
  • 支持异步请求和响应
  • 支持流、推送和优先级
  • 支持 WebSocket 协议
  • 支持 TLS 和 ALPN(应用层协议协商)协议
示例

下面是一个简单的使用新 HTTP2 客户端 API 发起 HTTP GET 请求的示例。

首先,我们需要导入 HTTP2 客户端 API 的包:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

然后,我们使用 HttpRequest.newBuilder() 方法创建一个 HTTP GET 请求:

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.example.com"))
        .GET()
        .build();

接着,我们使用 HttpClient.newHttpClient() 方法创建一个 HTTP 客户端:

HttpClient httpClient = HttpClient.newHttpClient();

最后,我们使用 httpClient.sendAsync() 方法发起异步请求并获取响应:

CompletableFuture<HttpResponse<String>> response =
        httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());

这里我们使用 HttpResponse.BodyHandlers.ofString() 来处理响应体,也可以使用 HttpResponse.BodyHandlers.ofByteArray() 来处理字节数组类型的响应体,或者自定义 HttpResponse.BodyHandler 来处理其他类型的响应体。

等到响应返回后,我们可以通过以下方式获取响应状态码和响应体:

int statusCode = response.get().statusCode();
String responseBody = response.get().body();

完整代码如下:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://www.example.com"))
                .GET()
                .build();
        
        HttpClient httpClient = HttpClient.newHttpClient();
        
        CompletableFuture<HttpResponse<String>> response =
                httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());

        int statusCode = response.get().statusCode();
        String responseBody = response.get().body();

        System.out.println("Status Code:" + statusCode);
        System.out.println("Response Body:" + responseBody);
    }
}

值得注意的是,如果我们发送一个 POST 请求,并且希望附带一个 JSON 格式的请求体,我们可以使用以下方式构建请求:

String requestBody = "{\"username\":\"example\",\"password\":\"secret\"}";
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.example.com/login"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(requestBody))
        .build();

当然,还有很多其他的用法,这篇文章只是对 Java 9 的 HTTP2 客户端 API 进行了一个简单介绍。希望对大家有所帮助。