模块 java.net.http

类 HttpRequest

java.lang.Object
java.net.http.HttpRequest

public abstract class HttpRequest extends Object
HTTP 请求。

HttpRequest 实例是通过 HttpRequest builder 构建的。 HttpRequest 构建器是从 newBuilder 方法之一获得的。可以设置请求的 URI 、标头和正文。请求主体通过提供给 POST PUT method 方法之一的 BodyPublisher 提供。一旦在构建器中设置了所有必需的参数,build 将返回 HttpRequest。可以多次复制和修改构建器,以构建多个在某些参数上不同的相关请求。

以下是将响应正文打印为字符串的 GET 请求示例:

  HttpClient client = HttpClient.newHttpClient();
  HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("http://foo.com/"))
     .build();
  client.sendAsync(request, BodyHandlers.ofString())
     .thenApply(HttpResponse::body)
     .thenAccept(System.out::println)
     .join();  

BodyPublishers 类提供了许多常见发布者的实现。或者,可以使用自定义 BodyPublisher 实现。

自从:
11
  • 构造方法详细信息

    • HttpRequest

      protected HttpRequest()
      创建一个 HttpRequest。
  • 方法详情

    • newBuilder

      public static HttpRequest.Builder  newBuilder(URI  uri)
      使用给定的 URI 创建一个 HttpRequest 构建器。
      参数:
      uri - 请求 URI
      返回:
      一个新的请求生成器
      抛出:
      IllegalArgumentException - 如果不支持 URI 方案。
    • newBuilder

      public static HttpRequest.Builder  newBuilder(HttpRequest  request, BiPredicate <String ,String > filter)
      创建一个 Builder 其初始状态是从现有 HttpRequest 复制的。

      这个构建器可以用来构建一个 HttpRequest ,相当于原来的,同时允许在构建之前修改请求状态——例如,添加额外的头。

      filter 应用于从给定请求复制的每个标头名称值对。完成后,只有满足 filter 规定的条件的标头才会出现在从此方法返回的 Builder 中。

      API 注意:
      以下场景演示了过滤器的典型用例。给定一个 HttpRequest request

      • 保留所有标题:
        HttpRequest.newBuilder(request, (n, v) -> true) 
      • 删除所有标头:
        HttpRequest.newBuilder(request, (n, v) -> false) 
      • 删除特定标头(例如 Foo-Bar):
        HttpRequest.newBuilder(request, (name, value) -> !name.equalsIgnoreCase("Foo-Bar")) 
      参数:
      request - 原始请求
      filter - 标题过滤器
      返回:
      一个新的请求生成器
      抛出:
      IllegalArgumentException - 如果无法从给定的请求中生成新的构建器(例如,如果请求包含非法参数)
      自从:
      16
    • newBuilder

      public static HttpRequest.Builder  newBuilder()
      创建一个 HttpRequest 构建器。
      返回:
      一个新的请求生成器
    • bodyPublisher

      public abstract Optional <HttpRequest.BodyPublisher > bodyPublisher()
      返回一个 Optional,其中包含在此请求上设置的 HttpRequest.BodyPublisher 。如果在请求的构建器中未设置 BodyPublisher,则 Optional 为空。
      返回:
      包含此请求的 BodyPublisherOptional
    • method

      public abstract String  method()
      返回此请求的请求方法。如果未明确设置,则任何请求的默认方法都是“GET”。
      返回:
      这个请求的方法
    • timeout

      public abstract Optional <Duration > timeout()
      返回包含此请求的超时持续时间的 Optional。如果超时持续时间未在请求的构建器中设置,则 Optional 为空。
      返回:
      包含此请求的超时持续时间的 Optional
    • expectContinue

      public abstract boolean expectContinue()
      返回此请求的 期待继续 设置。
      返回:
      此请求的期望继续设置
    • uri

      public abstract URI  uri()
      返回此请求的 URI
      返回:
      这个请求的 URI
    • version

      public abstract Optional <HttpClient.Version > version()
      返回一个 Optional 包含将为此 HttpRequest 请求的 HTTP 协议版本。如果版本未在请求的构建器中设置,则 Optional 为空。在这种情况下,请求的版本将是发送 HttpClient 的版本。应查询相应的HttpResponse 以确定实际使用的版本。
      返回:
      HTTP协议版本
    • headers

      public abstract HttpHeaders  headers()
      与此请求一起(或将与)一起发送的(用户可访问的)请求标头。
      返回:
      这个请求的 HttpHeaders
    • equals

      public final boolean equals(Object  obj)
      测试此 HTTP 请求实例是否与给定对象相等。

      如果给定对象不是 HttpRequest,则此方法返回 false。如果两个 HTTP 请求的 URI、方法和标头字段都相等,则它们是相等的。

      此方法满足Object.equals 方法的一般契约。

      重写:
      equals 在类 Object
      参数:
      obj - 此对象要与之比较的对象
      返回:
      true 当且仅当给定对象是等于此 HTTP 请求的 HttpRequest
      参见:
    • hashCode

      public final int hashCode()
      计算此 HTTP 请求实例的哈希码。

      哈希码基于 HTTP 请求的 URI、方法和标头组件,并满足 Object.hashCode 方法的一般约定。

      重写:
      hashCode 在类 Object
      返回:
      此 HTTP 请求的哈希码值
      参见: