モジュール java.net.http
パッケージ java.net.http

クラスHttpClient


  • public abstract class HttpClient
    extends Object
    HTTPクライアント。

    HttpClientを使用して「リクエスト」を送信し、「レスポンス」を取得できます。 builderを介して HttpClientが作成されます。 ビルダーを使用して、クライアントごとに次のような状態を構成できます: 優先プロトコル・バージョン(HTTP/1.1またはHTTP/2)、リダイレクトの有無、プロキシ、認証プロバイダなどがあります。一度ビルドされると、HttpClientは不変になり、複数のリクエストの送信に使用できます。

    HttpClientは、すべてのリクエストの構成情報とリソース共有を提供します。

    HttpRequestが送信されるたびにBodyHandlerを指定する必要があります。 BodyHandlerは、レスポンス本文(存在する場合)の処理方法を決定します。 HttpResponseを受信すると、ヘッダー、レスポンス・コードおよび本文(typically)を使用できます。 レスポンス本文のバイトが読み取られたかどうかは、レスポンス本文のタイプ(T)によって決まります。

    リクエストは同期または非同期のいずれかで送信できます。

    • send(HttpRequest, BodyHandler)ブロックは、リクエストが送信されてレスポンスが受信されるまでブロックされます。
    • sendAsync(HttpRequest, BodyHandler)がリクエストを送信し、レスポンスを非同期に受信します。 sendAsyncメソッドは、すぐにCompletableFuture<HttpResponse>を返します。 レスポンスが使用可能になると、 CompletableFutureが完了します。 返されたCompletableFutureは、様々な方法で結合して複数の非同期タスク間の依存性を宣言できます。

    同期の例

       HttpClient client = HttpClient.newBuilder()
            .version(Version.HTTP_1_1)
            .followRedirects(Redirect.NORMAL)
            .connectTimeout(Duration.ofSeconds(20))
            .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
            .authenticator(Authenticator.getDefault())
            .build();
       HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
       System.out.println(response.statusCode());
       System.out.println(response.body());  

    非同期の例

       HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://foo.com/"))
            .timeout(Duration.ofMinutes(2))
            .header("Content-Type", "application/json")
            .POST(BodyPublishers.ofFile(Paths.get("file.json")))
            .build();
       client.sendAsync(request, BodyHandlers.ofString())
            .thenApply(HttpResponse::body)
            .thenAccept(System.out::println);  

    セキュリティ・チェック

    セキュリティ・マネージャが存在する場合、セキュリティ・チェックはHTTPクライアントの送信メソッドによって実行されます。 宛先サーバーにアクセスするために適切なURLPermissionが必要で、プロキシ・サーバーが構成されている場合はプロキシ・サーバーが必要です。 プロキシにアクセスするために必要なURLPermissionの形式には、"CONNECT" (すべての種類のプロキシ処理)のmethodパラメータと、フォーム"socket://host:port"URL文字列があり、ホストとポートでプロキシ・アドレスを指定します。

    実装上のノート:
    executorHttpClientに明示的に設定されておらず、セキュリティ・マネージャがインストールされている場合、デフォルト・エグゼキュータは権限が付与されていないコンテキストで非同期タスクおよび依存タスクを実行します。 カスタムリクエスト本文パブリッシャレスポンス本文ハンドラレスポンス本文サブスクライバおよびWebSocketリスナーは、権限を必要とする操作を実行する場合、適切な権限付きコンテキスト内で実行する必要があります。
    導入されたバージョン:
    11
    • コンストラクタの詳細

      • HttpClient

        protected HttpClient()
        HttpClientを作成します。
    • メソッドの詳細

      • newHttpClient

        public static HttpClient newHttpClient()
        デフォルト設定を使用して新しいHttpClientを返します。

        newBuilder().build()と同等です。

        デフォルト設定には、"GET"リクエスト・メソッド、HTTP/2のプリファレンス、NEVERのリダイレクション・ポリシー、デフォルト・プロキシ・セレクタおよびデフォルトSSLコンテキストが含まれます。

        実装上のノート:
        システム全体のデフォルト値は、HttpClientインスタンスの作成時に取得されます。 たとえば、ProxySelector.setDefault(ProxySelector)またはSSLContext.setDefault(SSLContext)をコールして、HttpClientインスタンスの構築後にシステム全体の値を変更しても、すでに構築されているインスタンスには影響しません。
        戻り値:
        新しいHttpClient
      • newBuilder

        public static HttpClient.Builder newBuilder()
        新しいHttpClientビルダーを作成します。
        戻り値:
        an HttpClient.Builder
      • cookieHandler

        public abstract Optional<CookieHandler> cookieHandler()
        このクライアントCookieHandlerを含むOptionalを返します。 このクライアントのビルダーにCookieHandlerが設定されていない場合、Optionalは空です。
        戻り値:
        このクライアントのCookieHandlerを含むOptional
      • connectTimeout

        public abstract Optional<Duration> connectTimeout()
        このクライアントの「接続タイムアウト時間」を含むOptionalを返します。 クライアント・ビルダーで「接続タイムアウト時間」が設定されていない場合、Optionalは空になります。
        戻り値:
        このクライアント接続のタイムアウト時間を含むOptional
      • followRedirects

        public abstract HttpClient.Redirect followRedirects()
        このクライアントのfollowリダイレクト・ポリシーを返します。 リダイレクト・ポリシーを指定しないビルダーによって構築されるクライアントのデフォルト値は、NEVERです。
        戻り値:
        このクライアントのフォロー・リダイレクト設定
      • proxy

        public abstract Optional<ProxySelector> proxy()
        このクライアントに提供されたProxySelectorを含むOptionalを返します。 このクライアントのビルダーにプロキシ・セレクタが設定されていない場合、Optionalは空です。

        このメソッドが空のオプションを返すこともありますが、HTTPリクエストの送信に使用される、 HttpClientには突然の「デフォルト・プロキシ・セレクタ」がある可能性があります。

        戻り値:
        このクライアントに提供されるプロキシ・セレクタを含むOptional
      • sslContext

        public abstract SSLContext sslContext()
        このクライアントのSSLContextを返します。

        このクライアントのビルダーにSSLContextが設定されていない場合は、デフォルト・コンテキストが返されます。

        戻り値:
        このクライアントのSSLContext
      • sslParameters

        public abstract SSLParameters sslParameters()
        このクライアントの SSLParametersのコピーを返します。

        クライアントのビルダーでSSLParametersが設定されていない場合は、クライアントが使用する実装固有のデフォルト・パラメータ・セットが返されます。

        戻り値:
        このクライアントのSSLParameters
      • authenticator

        public abstract Optional<Authenticator> authenticator()
        このクライアントに設定されたAuthenticatorを含むOptionalを返します。 クライアントのビルダーにAuthenticatorが設定されていない場合、Optionalは空です。
        戻り値:
        このクライアントのAuthenticatorを含むOptional
      • version

        public abstract HttpClient.Version version()
        このクライアントの優先HTTPプロトコル・バージョンを返します。 デフォルト値は HttpClient.Version.HTTP_2です
        実装上のノート:
        制約は、プロトコル・バージョンの選択に影響する場合もあります。 たとえば、プロキシを介してHTTP/2がリクエストされ、実装がこのモードをサポートしない場合、HTTP/1.1を使用できます。
        戻り値:
        HTTPプロトコル・バージョンがリクエストされました
      • executor

        public abstract Optional<Executor> executor()
        このクライアントExecutorを含むOptionalを返します。 クライアントのビルダーにExecutorが設定されていない場合、Optionalは空です。

        このメソッドが空のオプションを返す場合でも、 HttpClientには、非同期および依存タスクの実行に使用される非公開のデフォルト・エグゼキュータがまだ存在する可能性があります。

        戻り値:
        このクライアントのExecutorを含むOptional
      • send

        public abstract <T> HttpResponse<T> send​(HttpRequest request,
                                                 HttpResponse.BodyHandler<T> responseBodyHandler)
                                          throws IOException,
                                                 InterruptedException
        指定された要求をこのクライアントを使用して送信し、必要に応じてブロックして応答を取得します。 返されるHttpResponse<T>には、レスポンス・ステータス、ヘッダーおよび本文(特定のレスポンス本文ハンドラによって処理される)が含まれます。
        型パラメータ:
        T - レスポンス本文のタイプ
        パラメータ:
        request - リクエスト
        responseBodyHandler - レスポンス本文ハンドラ
        戻り値:
        レスポンス
        例外:
        IOException - 送信または受信時にI/Oエラーが発生した場合
        InterruptedException - 操作が中断された場合
        IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
        SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリクエストのURLに対するaccessを拒否する場合、またはURLが構成されている場合はプロキシを拒否します。 詳細は、「セキュリティ・チェック」を参照してください。
      • sendAsync

        public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync​(HttpRequest request,
                                                                         HttpResponse.BodyHandler<T> responseBodyHandler)
        指定されたレスポンス本文ハンドラとともに、このクライアントを使用して、指定されたリクエストを非同期に送信します。

        同等: sendAsync(request, responseBodyHandler, null)

        型パラメータ:
        T - レスポンス本文のタイプ
        パラメータ:
        request - リクエスト
        responseBodyHandler - レスポンス本文ハンドラ
        戻り値:
        CompletableFuture<HttpResponse<T>>
        例外:
        IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
      • sendAsync

        public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync​(HttpRequest request,
                                                                         HttpResponse.BodyHandler<T> responseBodyHandler,
                                                                         HttpResponse.PushPromiseHandler<T> pushPromiseHandler)
        指定されたレスポンス本文ハンドラとともにこのクライアントを使用して、指定されたリクエストを非同期に送信し、プッシュ・プロ・ミス・ハンドラをプッシュします。

        戻されたcompletableは、将来正常に完了すると、レスポンス・ステータス、ヘッダーおよび本文(指定されたレスポンス本文ハンドラによって処理される)を含むHttpResponse<T>で完了します。

        「プッシュ・プロ・ミス」がある場合は、所定のpushPromiseHandlerによって処理されます。 null値がpushPromiseHandlerである場合、プッシュ・プロ・ミスは拒否されます。

        返された完了可能な将来は、次の方法で例外的に完了します。

        • IOException - 送信または受信時にI/Oエラーが発生した場合
        • SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリクエストのURLに対するaccessを拒否する場合、またはURLが構成されている場合はプロキシを拒否します。 詳細は、「セキュリティ・チェック」を参照してください。

        型パラメータ:
        T - レスポンス本文のタイプ
        パラメータ:
        request - リクエスト
        responseBodyHandler - レスポンス本文ハンドラ
        pushPromiseHandler - プッシュ・プロ・ミス・ハンドラ。nullの可能性があります。
        戻り値:
        CompletableFuture<HttpResponse<T>>
        例外:
        IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
      • newWebSocketBuilder

        public WebSocket.Builder newWebSocketBuilder()
        新しいWebSocketビルダーを作成します(オプションの操作)。

           HttpClient client = HttpClient.newHttpClient();
           CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
                   .buildAsync(URI.create("ws://websocket.example.com"), listener); 

        WebSocket Opening Handshakeをより詳細に制御するには、カスタムHttpClientを使用します。

           InetSocketAddress addr = new InetSocketAddress("proxy.example.com", 80);
           HttpClient client = HttpClient.newBuilder()
                   .proxy(ProxySelector.of(addr))
                   .build();
           CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
                   .buildAsync(URI.create("ws://websocket.example.com"), listener); 

        実装要件:
        このメソッドのデフォルト実装はUnsupportedOperationExceptionをスローします。 newHttpClient()またはnewBuilder()によって取得されたクライアントは、WebSocketビルダーを返します。
        実装上のノート:
        作成したビルダーとWebSocketはどちらも非ブロッキング方式で動作します。 つまり、これらのメソッドは、CompletableFutureを返す前にブロックしません。 非同期タスクは、このHttpClientのエグゼキュータで実行されます。

        Listener.onCloseから戻されたCompletionStageが完了すると、WebSocketは、受信したメッセージと同じコードと空の理由を持つクローズ・メッセージを送信します。

        戻り値:
        WebSocket.Builder
        例外:
        UnsupportedOperationException - このHttpClientがWebSocketサポートを提供しない場合