Module java.net.http
Package java.net.http

Class HttpRequest

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

public abstract class HttpRequest extends Object
一个HTTP请求。

HttpRequest实例是通过HttpRequest builder构建的。可以从其中一个newBuilder方法获取HttpRequest builder。可以设置请求的URI、头部和主体。请求主体通过提供给POSTPUTmethod方法的一个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
  • Constructor Details

    • HttpRequest

      protected HttpRequest()
      创建一个HttpRequest。
  • Method Details

    • 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注释:
      以下场景展示了filter的典型用例。给定一个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()
      返回一个包含在此请求上设置的HttpRequest.BodyPublisherOptional。如果在请求的构建器中未设置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()
      返回一个包含将为此HttpRequest请求的HTTP协议版本的Optional。如果在请求的构建器中未设置版本,则Optional为空。在这种情况下,请求的版本将是发送的HttpClient的版本。应查询相应的HttpResponse以确定实际使用的版本。
      返回:
      HTTP协议版本
    • headers

      public abstract HttpHeaders headers()
      此请求发送或将要发送的(用户可访问的)请求头。
      返回:
      此请求的HttpHeaders
    • equals

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

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

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

      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的对象
      返回:
      如果给定对象是等于此HTTP请求的 HttpRequest,则返回true
      参见:
    • hashCode

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

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

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