HTTP HEAD方法用于读取使用HTTP GET方法访问资源时返回的标头信息。 可以在决定下载大量资源以节省带宽之前完成此请求。 对HEAD方法的响应不应包含主体,在下面的代码中,我们使用HttpResponse.BodyHandlers.discarding(),这是一个丢弃响应主体的响应主体处理程序。
在下面的代码片段中,我们首先创建一个HttpClient实例,在本示例中,我们使用HttpClient.newBuilder().build()方法。 创建HttpClient之后,我们创建HttpRequest对象。 我们通过调用方法method()将HTTP方法设置为HEAD,并将字符串“ HEAD”作为方法名称,并将HttpRequest.BodyPublishers.noBody()传递给不发送请求主体的请求主体发布者。
下面代码中的下一步是使用headers()方法发送请求并从HttpResponse对象获取响应头。HttpHeaders对象的map()方法为我们提供服务器返回的头的键值。
package org.nhooo.example.httpclient; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpHeaders; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class HeadRequestExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://google.com")) .method("HEAD", HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<Void> response = client.send(request, HttpResponse.BodyHandlers.discarding()); //返回这个HttpHeaders的一个多视图多映射视图。 //该映射包含字符串的键,其中字符串列表为 //它的值。 HttpHeaders headers = response.headers(); headers.map().forEach((key, values) -> System.out.printf("%s = %s%n", key, values)); } }
这是我们获取并打印到控制台屏幕的HTTP标头:
:status = [301] alt-svc = [quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000] cache-control = [public, max-age=2592000] content-length = [220] content-type = [text/html; charset=UTF-8] date = [Wed, 22 Apr 2020 14:41:49 GMT] expires = [Fri, 22 May 2020 14:41:49 GMT] location = [https://www.google.com/] server = [gws] x-frame-options = [SAMEORIGIN] x-xss-protection = [0]