public abstract class HttpClient extends Object
 An HttpClient can be used to send requests and retrieve their responses. An 
 HttpClient is created through a builder. The
 builder can be used to configure per-client state, like: the preferred
 protocol version ( HTTP/1.1 or HTTP/2 ), whether to follow redirects, a
 proxy, an authenticator, etc. Once built, an HttpClient is immutable,
 and can be used to send multiple requests.
 
 An HttpClient provides configuration information, and resource
 sharing, for all requests sent through it.
 
 A BodyHandler must be supplied for each HttpRequest sent. The BodyHandler determines how to handle the
 response body, if any. Once an HttpResponse is received, the
 headers, response code, and body (typically) are available. Whether the
 response body bytes have been read or not depends on the type, T, of
 the response body.
 
Requests can be sent either synchronously or asynchronously:
- send(HttpRequest, BodyHandler)blocks until the request has been sent and the response has been received.
- sendAsync(HttpRequest, BodyHandler)sends the request and receives the response asynchronously. The- sendAsyncmethod returns immediately with a- CompletableFuture<- HttpResponse>. The- CompletableFuturecompletes when the response becomes available. The returned- CompletableFuturecan be combined in different ways to declare dependencies among several asynchronous tasks.
Synchronous Example
   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());  Asynchronous Example
   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);   If a security manager is present then security checks are performed by
 the HTTP Client's sending methods. An appropriate URLPermission is
 required to access the destination server, and proxy server if one has
 been configured. The form of the URLPermission required to access a
 proxy has a method parameter of "CONNECT" (for all kinds of
 proxying) and a URL string of the form "socket://host:port"
 where host and port specify the proxy's address.
- Implementation Note:
- If an explicit executor has not been set for an HttpClient, and a security manager has been installed, then the default executor will execute asynchronous and dependent tasks in a context that is granted no permissions. Custom request body publishers, response body handlers, response body subscribers, and WebSocket Listeners, if executing operations that require privileges, should do so within an appropriate privileged context.
- Since:
- 11
- 
Nested Class SummaryNested Classes Modifier and Type Class Description static interfaceHttpClient.BuilderA builder of HTTP Clients.static classHttpClient.RedirectDefines the automatic redirection policy.static classHttpClient.VersionThe HTTP protocol version.
- 
Constructor SummaryConstructors Modifier Constructor Description protectedHttpClient()Creates an HttpClient.
- 
Method SummaryModifier and Type Method Description abstract Optional<Authenticator>authenticator()Returns anOptionalcontaining theAuthenticatorset on this client.abstract Optional<Duration>connectTimeout()Returns anOptionalcontaining the connect timeout duration for this client.abstract Optional<CookieHandler>cookieHandler()Returns anOptionalcontaining this client'sCookieHandler.abstract Optional<Executor>executor()Returns anOptionalcontaining this client'sExecutor.abstract HttpClient.RedirectfollowRedirects()Returns the follow redirects policy for this client.static HttpClient.BuildernewBuilder()Creates a newHttpClientbuilder.static HttpClientnewHttpClient()Returns a newHttpClientwith default settings.WebSocket.BuildernewWebSocketBuilder()Creates a newWebSocketbuilder (optional operation).abstract Optional<ProxySelector>proxy()Returns anOptionalcontaining theProxySelectorsupplied to this client.abstract <T> HttpResponse<T>send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)Sends the given request using this client, blocking if necessary to get the response.abstract <T> CompletableFuture<HttpResponse<T>>sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)Sends the given request asynchronously using this client with the given response body handler.abstract <T> CompletableFuture<HttpResponse<T>>sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)Sends the given request asynchronously using this client with the given response body handler and push promise handler.abstract SSLContextsslContext()Returns this client'sSSLContext.abstract SSLParameterssslParameters()Returns a copy of this client'sSSLParameters.abstract HttpClient.Versionversion()Returns the preferred HTTP protocol version for this client.
- 
Constructor Details- 
HttpClientprotected HttpClient()Creates an HttpClient.
 
- 
- 
Method Details- 
newHttpClientReturns a newHttpClientwith default settings.Equivalent to newBuilder().build().The default settings include: the "GET" request method, a preference of HTTP/2, a redirection policy of NEVER, the default proxy selector, and the default SSL context. - Implementation Note:
- The system-wide default values are retrieved at the time the
 HttpClientinstance is constructed. Changing the system-wide values after anHttpClientinstance has been built, for instance, by callingProxySelector.setDefault(ProxySelector)orSSLContext.setDefault(SSLContext), has no effect on already built instances.
- Returns:
- a new HttpClient
 
- 
newBuilderCreates a newHttpClientbuilder.- Returns:
- an HttpClient.Builder
 
- 
cookieHandlerReturns anOptionalcontaining this client'sCookieHandler. If noCookieHandlerwas set in this client's builder, then theOptionalis empty.- Returns:
- an Optionalcontaining this client'sCookieHandler
 
- 
connectTimeoutReturns anOptionalcontaining the connect timeout duration for this client. If the connect timeout duration was not set in the client's builder, then theOptionalis empty.- Returns:
- an Optionalcontaining this client's connect timeout duration
 
- 
followRedirectsReturns the follow redirects policy for this client. The default value for client's built by builders that do not specify a redirect policy isNEVER.- Returns:
- this client's follow redirects setting
 
- 
proxyReturns anOptionalcontaining theProxySelectorsupplied to this client. If no proxy selector was set in this client's builder, then theOptionalis empty.Even though this method may return an empty optional, the HttpClientmay still have a non-exposed default proxy selector that is used for sending HTTP requests.- Returns:
- an Optionalcontaining the proxy selector supplied to this client.
 
- 
sslContextReturns this client'sSSLContext.If no SSLContextwas set in this client's builder, then the default context is returned.- Returns:
- this client's SSLContext
 
- 
sslParametersReturns a copy of this client'sSSLParameters.If no SSLParameterswere set in the client's builder, then an implementation specific default set of parameters, that the client will use, is returned.- Returns:
- this client's SSLParameters
 
- 
authenticatorReturns anOptionalcontaining theAuthenticatorset on this client. If noAuthenticatorwas set in the client's builder, then theOptionalis empty.- Returns:
- an Optionalcontaining this client'sAuthenticator
 
- 
versionReturns the preferred HTTP protocol version for this client. The default value isHttpClient.Version.HTTP_2- Implementation Note:
- Constraints may also affect the selection of protocol version. For example, if HTTP/2 is requested through a proxy, and if the implementation does not support this mode, then HTTP/1.1 may be used
- Returns:
- the HTTP protocol version requested
 
- 
executorReturns anOptionalcontaining this client'sExecutor. If noExecutorwas set in the client's builder, then theOptionalis empty.Even though this method may return an empty optional, the HttpClientmay still have an non-exposed default executor that is used for executing asynchronous and dependent tasks.- Returns:
- an Optionalcontaining this client'sExecutor
 
- 
sendpublic abstract <T> HttpResponse<T> send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler) throws IOException, InterruptedExceptionSends the given request using this client, blocking if necessary to get the response. The returnedHttpResponse<T>contains the response status, headers, and body ( as handled by given response body handler ).- Type Parameters:
- T- the response body type
- Parameters:
- request- the request
- responseBodyHandler- the response body handler
- Returns:
- the response
- Throws:
- IOException- if an I/O error occurs when sending or receiving
- InterruptedException- if the operation is interrupted
- IllegalArgumentException- if the- requestargument is not a request that could have been validly built as specified by- HttpRequest.Builder.
- SecurityException- If a security manager has been installed and it denies- accessto the URL in the given request, or proxy if one is configured. See security checks for further information.
 
- 
sendAsyncpublic abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)Sends the given request asynchronously using this client with the given response body handler.Equivalent to: sendAsync(request, responseBodyHandler, null).- Type Parameters:
- T- the response body type
- Parameters:
- request- the request
- responseBodyHandler- the response body handler
- Returns:
- a CompletableFuture<HttpResponse<T>>
- Throws:
- IllegalArgumentException- if the- requestargument is not a request that could have been validly built as specified by- HttpRequest.Builder.
 
- 
sendAsyncpublic abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)Sends the given request asynchronously using this client with the given response body handler and push promise handler.The returned completable future, if completed successfully, completes with an HttpResponse<T>that contains the response status, headers, and body ( as handled by given response body handler ).Push promises received, if any, are handled by the given pushPromiseHandler. AnullvaluedpushPromiseHandlerrejects any push promises.The returned completable future completes exceptionally with: - IOException- if an I/O error occurs when sending or receiving
- SecurityException- If a security manager has been installed and it denies- accessto the URL in the given request, or proxy if one is configured. See security checks for further information.
 - Type Parameters:
- T- the response body type
- Parameters:
- request- the request
- responseBodyHandler- the response body handler
- pushPromiseHandler- push promise handler, may be null
- Returns:
- a CompletableFuture<HttpResponse<T>>
- Throws:
- IllegalArgumentException- if the- requestargument is not a request that could have been validly built as specified by- HttpRequest.Builder.
 
- 
newWebSocketBuilderCreates a newWebSocketbuilder (optional operation).Example HttpClient client = HttpClient.newHttpClient(); CompletableFuture<WebSocket> ws = client.newWebSocketBuilder() .buildAsync(URI.create("ws://websocket.example.com"), listener);Finer control over the WebSocket Opening Handshake can be achieved by using a custom HttpClient.Example 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);- Implementation Requirements:
- The default implementation of this method throws
 UnsupportedOperationException. Clients obtained throughnewHttpClient()ornewBuilder()return aWebSocketbuilder.
- Implementation Note:
- Both builder and WebSockets created with it operate in a non-blocking fashion. That is, their methods do not block before returning aCompletableFuture. Asynchronous tasks are executed in thisHttpClient's executor.When a CompletionStagereturned fromListener.onClosecompletes, theWebSocketwill send a Close message that has the same code the received message has and an empty reason.
- Returns:
- a WebSocket.Builder
- Throws:
- UnsupportedOperationException- if this- HttpClientdoes not provide WebSocket support
 
 
-