【问题标题】:java 11 HttpClient send header then bodyjava 11 HttpClient发送标头然后正文
【发布时间】:2021-11-14 00:29:57
【问题描述】:

我想使用 Java 11 HttpClient 并首先发送标头,检查响应,如果响应正常则发送正文。

如何只发送标头?

这是我当前的代码:

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 发送了正文。

【问题讨论】:

  • “发件人头优先”是什么意思?此请求将使用哪种 HTTP 方法?
  • 发送两个单独的请求:首先是HEAD,然后是Body。

标签: java httprequest httpclient head


【解决方案1】:

默认情况下,请求头首先出现在请求中。

您问的是,第一个带有标头的请求,然后带有主体的请求是两个不同的请求。不能以这种方式破坏单个请求。

如果说的是Http HEAD方法的用法,那么 HEAD 方法要求的响应与 GET 请求相同,但没有响应正文。

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

使用 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);
        });

【讨论】:

  • 是的,我想发送两个单独的请求:首先是 HEAD,然后是 BODY
  • 执行 HEAD 请求后,您可以使用 HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString 验证 HEAD 响应并进一步触发 API 调用,例如 GET、POST 等()); System.out.println(response.body());
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多