本文共 1857 字,大约阅读时间需要 6 分钟。
首先,基于Java API的HTTP2客户端,至少要使用Java 9,主要是基于其中的jdk.incubator.httpclient模块。Java 10中的相关部分没有变化。Java 11中已经正式发布到java.net.http模块。
jdk.incubator.httpclient模块主要提供了如下API:
这里我们重点关注HTTP相关的类的用法。
其次,要使用Java 10,需要下载2018年发布的Eclipse IDE Photon版本。当然,如果使用Java 9只要2017年发布的Eclipse IDE Oxygen版本。
1. 创建Java项目
注意其中勾选“Create module-info.java file”。由于从Java 9开始,JDK采用模块化链接运行,所以任何项目都以Java模块的方式出现。
点击“Finish”即提示输入“模块名”,默认为项目名。
创建完成后的Java项目(事实上就是一个Java模块),在src的根目录下就有module-info.java文件。打开该文件,添加对jdk.incubator.httpclient模块的依赖,编辑如下:
module com.mycompany.mymodule.http2 { requires jdk.incubator.httpclient;}
2. 创建HTTP2的客户端类
这里的操作跟传统用法一样。
2.1 使用默认参数创建HttpClient对象
//Create a HttpClient with default settings.HttpClient client = HttpClient.newHttpClient();
2.2 使用HttpClient.newBuilder()创建定制的HttpClient对象
HttpClient client = HttpClient .newBuilder() .version(HttpClient.Version.HTTP_2) .priority(0) .sslContext(SSLContext.getInstance("TLSv1.2")) .build();
2.3 HTTP GET请求
HttpRequest httpRequest = HttpRequest .newBuilder() .uri(new URI("https://www.mydomain.com/")) .headers("myKey1", "myValue1", "myKey2", "myValue2") .GET() .build();
2.4 HTTP POST请求
HttpRequest httpRequest = HttpRequest .newBuilder() .uri(new URI("https://www.mydomain.com/")) .headers("myKey", "myValue") .POST(BodyPublisher.fromString("Hello world")) .build();
2.5 发送同步请求
HttpResponsehttpResponse = client.send(httpRequest, HttpResponse.BodyHandler.asString());
2.6 发送异步请求
CompletableFuture> httpResponse = client.sendAsync(httpRequest, HttpResponse.BodyHandler.asString());
参考链接:
https://www.eclipse.org/downloads/packages/all
https://docs.oracle.com/javase/10/docs/api/jdk/incubator/http/package-summary.html
https://docs.oracle.com/javase/10/docs/specs/security/standard-names.html#sslcontext-algorithms