方法 newBuilder(), build()
HttpRequest类用来描述一个http-request,从名字就很容易理解。这个对象本身什么都不做,它只是包含有关 http 请求的各种信息。因此,正如您可能已经猜到的那样,Builder 模板也用于创建它。
HttpRequest request = HttpRequest.newBuilder()
.method1()
.method2()
.methodN()
.build();
在调用方法newBuilder()和build()之间,您需要调用所有方法来构造对象HTTP请求.
一个简单请求的示例如下所示:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(“http://codegym.cc”))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
您可以在官方文档的链接中找到HttpRequest类的所有方法。
然后我们将分析其中最受欢迎的。
uri() 方法
使用uri()方法,您可以设置 http 请求将发送到的 URI(或 URL)。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri( URI.create(“http://codegym.cc”) )
.build();
顺便说一下,您可以通过将 URI 直接传递给newBuilder()方法来缩短这段代码:
HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();
重要的!可以通过两种方式创建 URI:
- newURI(字符串)
- URI.create(字符串)
第二种方式更可取。不幸的是,第一种方法不是很好,因为 URI 构造函数被声明为public URI(String str) throws URISyntaxException,而URISyntaxException是一个已检查的异常。
方法 GET()、POST()、PUT()、DELETE()
您可以使用以下方法设置 http 请求方法:
- 得到()
- 邮政()
- 放()
- 删除()
这是一个简单的 GET 请求的样子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.GET()
.build();
版本() 方法
您还可以设置 HTTP 协议版本。只有2个选项:
- HttpClient.版本.HTTP_1_1
- HttpClient.版本.HTTP_2
假设您想使用 HTTP/2 协议创建请求,那么您需要编写:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.version( HttpClient.Version.HTTP_2 )
.GET()
.build();
很简单,不是吗?:)
超时() 方法
您还可以设置查询执行时间。如果它通过并且请求从未完成,将抛出HttpTimeoutException。
时间本身是使用对象设置的期间来自 Java 日期时间 API。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.timeout( Duration.of(5, SECONDS) )
.GET()
.build();
此方法的存在表明HttpClient和HttpRequest类可以执行各种任务。想象一下,您正在执行一个请求,网络发生了一些事情并且持续了 30 秒。立即接收到异常并正确地做出反应要有用得多。
标头() 方法
您还可以向任何请求添加任意数量的标头。而且它和其他任何事情一样容易做。为此有一个特殊的方法 - header()。例子:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.header("name1", "value1")
.header("name2", "value2")
.GET()
.build();
还有另一种方法可以一次设置多个标头。例如,如果您将标题列表转换为数组,它可能会派上用场:
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://codegym.cc"))
.headers("name1", "value1", "name2", "value2")
.GET()
.build();
基本的一切都很简单。
GO TO FULL VERSION