java 11 HttpClient 发送 header 然后 body

java 11 HttpClient send header then body

我想使用 Java 11 HttpClient 并先发送 header,检查响应,如果响应正常,则发送 body.

如何才能只发送header?

这是我当前的代码:

HttpClient httpClient = HttpClient.newBuilder()
                .version(HttpClient.Version.HTTP_2)
                .followRedirects(HttpClient.Redirect.NORMAL)
                .connectTimeout(Duration.ofSeconds(10))
                .authenticator(Authenticator.getDefault())
                .build();
    
HttpRequest httpRequest = HttpRequest.newBuilder("someEndpoint)
                .header(CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .header(AUTHORIZATION, "someApiKey)
                .build();

HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());

然而,对于这样的 httpResponse,我明白我发送了 body。

默认情况下,header 在请求中排在第一位。

你问的是,第一个 header 的请求和 body 的第一个请求是两个不同的请求。不能这样破坏单个请求。

如果你说的是Http HEAD方法的用法,那么 HEAD 方法请求与 GET 请求相同的响应,但没有响应 body.

HTTP HEAD 方法请求的 header 将在 HEAD 请求的 URL 改为使用 HTTP GET 方法请求时返回。例如,如果 URL 可能会产生大量下载,则 HEAD 请求可以读取其 Content-Length header 来检查文件大小,而无需实际下载文件。

一个使用HEAD方法的例子:-

var httpClient: HttpClient = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
    var requestHead = HttpRequest.newBuilder()
            .method("HEAD", HttpRequest.BodyPublishers.noBody())    
            .uri(URI.create("https://www.test.com"))
            .build();
    val httpResponse = httpClient.send(requestHead, BodyHandlers.discarding());

HttpHeaders headers = response.headers();

        headers.map().forEach((key, values) -> {
            System.out.printf("%s: %s%n", key, values);
        });