我们都知道在jdk11之前都在用okhttp或者org.apache.httpcomponents
其实早在jdk9的时候这个方案就在孵化中
上面的截图来自openjdk的官网,注:openjdk是个开源项目,不存在侵权现象
这是openjdk的官网:JEP 110: HTTP/2 Client (Incubator) (openjdk.org)
具体出在jdk11 稳定版里面,可以说11版本成型,接下来我举个小例子
package com.example;
import java.net.*;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client= HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://baidu.com/"))
.timeout(Duration.ofMinutes(2))
.GET()
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
这个例子很简单,就是现在HttpRequest里面构造一下uri ,timeout,Get请求,通过build方法进行构造,不得不说,现在私有化构造器的同时一般都采用建造者模式,又或者为了单一对象考虑,比如说自己类里面new了一个对象,然后搞一个方法return出去,我们还可以通过反射来new 这种类的对象
接下来就是创建 HttpClient的创建,唯一要注意的点是要允许重定向
client 发送请求,send有两个参数,一个是request 另一个是HttpResponse参数类型,并做了转换
后面就是拿到反应结果集,输出就行了
这里我想开一个新的专栏,专门讲jdk8之后的特性