Class ClientRequestBase<T extends ClientRequest<T>, R extends HttpClientResponse>
java.lang.Object
io.helidon.webclient.api.ClientRequestBase<T,R>
- Type Parameters:
T- type of the requestR- type of the response
- All Implemented Interfaces:
ClientRequest<T>, FullClientRequest<T>
- Direct Known Subclasses:
HttpClientRequest
public abstract class ClientRequestBase<T extends ClientRequest<T>, R extends HttpClientResponse>
extends Object
implements FullClientRequest<T>
Abstract base implementation of an HTTP client. Provides helpful methods to handle cookies, client services etc.
-
Nested Class Summary
Nested classes/interfaces inherited from interface ClientRequest
ClientRequest.OutputStreamHandlerModifier and TypeInterfaceDescriptionstatic interfaceHandle output stream. -
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties) Create a new request.protectedClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties, ClientUri redirectSourceUri) Create a new request.protectedClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties, ClientUri redirectSourceUri, boolean crossOriginRedirect) Create a new request.protectedClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Map<String, String> properties) Create a new request. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidAppend additional headers before sending the request.address()Address of the connection, if configured.address(SocketAddress socketAddress) Socket address to use.final voidClear an internally supplied connection without changing other request state.voidClear retained route state after the current top-level request invocation, or when it no longer matches a finalized request target.protected HttpClientConfigAssociated client configuration.Possible explicit connection to use (such as when using a proxy).connection(ClientConnection connection) This method is for explicit connection use by this request.protected final booleancrossesRedirectOriginBoundary(ClientUri requestUri) Whether a redirect from this request to the provided URI would cross, or has already crossed, an origin boundary.protected abstract RdoOutputStream(ClientRequest.OutputStreamHandler outputStreamHandler) Submit a request entity provided through an output stream.protected abstract RSubmit a request entity.booleanWhether to follow redirects.followRedirects(boolean followRedirects) Whether to follow redirects.fragment(UriFragment fragment) Set fragment of the URI.Set an HTTP header.headers()Get a (mutable) instance of outgoing headers.Configure headers.headers(Consumer<ClientRequestHeaders> headersConsumer) Update headers.protected WebClientServiceResponseinvokeServices(WebClient webClient, WebClientService.TransportChain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services and publish applicable transport response context before they unwind.protected WebClientServiceResponseinvokeServices(WebClientService.Chain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services.protected WebClientServiceResponseinvokeServices(WebClientService.WireProtocolChain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services.booleanWhether to use keep-alive connection (if relevant for the used HTTP version).keepAlive(boolean keepAlive) Whether to use keep alive with this request.intMaximal number of redirects to follow.maxRedirects(int maxRedirects) Max number of the followed redirects.protected MediaContextMedia context configured for this request.method()HTTP method to be invoked.outputStream(ClientRequest.OutputStreamHandler outputStreamConsumer) Handle output stream and submit the request.Configure path to call.Replace a placeholder in URI with an actual value.Replace a placeholder in URI with an actual value.Properties configured by a user or by other components.Add a property to be used by this request.proxy()Proxy configuration (may be no-proxy).Proxy configuration for this specific request.queryParam(String name, String... values) Add query parameter.Read 100-Continue timeout.readContinueTimeout(Duration readContinueTimeout) Read 100-Continue timeout for this request.Read timeout.readTimeout(Duration readTimeout) Read timeout for this request.request()Request without an entity.Request ID.protected final RSubmit an internal request that participates in the enclosing top-level request's selected route.Resolved URI that will be used to invoke this request.protected ClientUriresolveUri(ClientUri toResolve) Resolve possible templated URI definition against the providedClientUri, extracting possible query information into the provided writable query.protected final voidsanitizeRedirectSensitiveHeaders(ClientUri requestUri, ClientRequestHeaders requestHeaders) Remove headers that must not cross redirect trust boundaries.Effective proxy route already selected during the current top-level request invocation.voidselectedProxyRoute(ProxyRoute proxyRoute) Retain an effective proxy route while handing a request between protocol implementations in the current top-level request invocation.Whether Expect 100-Continue header is sent to verify server availability before sending an entity.sendExpectContinue(boolean sendExpectContinue) Whether Expect 100-Continue header is sent to verify server availability before sending an entity.booleanWhether to skip URI encoding.skipUriEncoding(boolean skip) Disable uri encoding.sni()Request-level SNI configuration.Configure client-side TLS SNI for this request.Submit an entity.tls()TLS configuration (may be disabled - e.g.TLS configuration for this specific request.uri()URI of this request.Configure request URI.Configure URI.Configure URI.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ClientRequest
accept, accept, contentType, fragment, header, header, outputStream, request, request, requestEntity, requestEntity, sni, submit, submitModifier and TypeMethodDescriptiondefault TAccepted media types.default Taccept(HttpMediaType... accepted) Accepted media types.default TcontentType(MediaType contentType) Sets the content type of the request.default TSet fragment of the URI.default Theader(HeaderName name, String... values) Set an HTTP header.default Theader(HeaderName name, List<String> values) Set an HTTP header with multiple values.default <T> ClientResponseTyped<T> outputStream(ClientRequest.OutputStreamHandler outputStreamConsumer, Class<T> requestedType) Handle output stream and request a specific type.default <E> ClientResponseTyped<E> request(GenericType<E> type) Request without sending an entity.default <E> ClientResponseTyped<E> Request without sending an entity.default <E> ErequestEntity(GenericType<E> type) Request entity without sending a request entity, asking for entity only.default <E> ErequestEntity(Class<E> type) Request entity without sending a request entity, asking for entity only.default Tsni(Consumer<SniConfig.Builder> sni) Configure client-side TLS SNI for this request.default <E> ClientResponseTyped<E> submit(Object entity, GenericType<E> requestedType) Submit an entity and request a specific type.default <E> ClientResponseTyped<E> Submit an entity and request a specific type.
-
Field Details
-
USER_AGENT_HEADER
Helidon user agent request header. -
PROXY_CONNECTION
Proxy connection header.
-
-
Constructor Details
-
ClientRequestBase
protected ClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Map<String, String> properties) Create a new request.- Parameters:
clientConfig- client configurationcookieManager- cookie managerprotocolId- protocol identifiermethod- HTTP methodclientUri- request URIproperties- request properties
-
ClientRequestBase
protected ClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties) Create a new request.- Parameters:
clientConfig- client configurationcookieManager- cookie managerprotocolId- protocol identifiermethod- HTTP methodclientUri- request URIsendExpectContinue- whether to send theExpect: 100-Continueheaderproperties- request properties
-
ClientRequestBase
protected ClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties, ClientUri redirectSourceUri) Create a new request.- Parameters:
clientConfig- client configurationcookieManager- cookie managerprotocolId- protocol identifiermethod- HTTP methodclientUri- request URIsendExpectContinue- whether to send theExpect: 100-Continueheaderproperties- request propertiesredirectSourceUri- original request URI for redirect handling
-
ClientRequestBase
protected ClientRequestBase(HttpClientConfig clientConfig, WebClientCookieManager cookieManager, String protocolId, Method method, ClientUri clientUri, Boolean sendExpectContinue, Map<String, String> properties, ClientUri redirectSourceUri, boolean crossOriginRedirect) Create a new request.- Parameters:
clientConfig- client configurationcookieManager- cookie managerprotocolId- protocol identifiermethod- HTTP methodclientUri- request URIsendExpectContinue- whether to send theExpect: 100-Continueheaderproperties- request propertiesredirectSourceUri- original request URI for redirect handlingcrossOriginRedirect- whether a previous redirect crossed an origin boundary
-
-
Method Details
-
tls
Description copied from interface:ClientRequestTLS configuration for this specific request.- Specified by:
tlsin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
tls- tls configuration- Returns:
- updated request
-
sni
Description copied from interface:ClientRequestConfigure client-side TLS SNI for this request.Request-level SNI overrides client-level SNI. A configured SNI host is also used as the TLS peer host for endpoint identification.
- Specified by:
sniin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
sni- SNI configuration- Returns:
- updated request
-
uri
Description copied from interface:ClientRequestConfigure URI.- Specified by:
uriin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
uri- uri to resolve against base URI, or to use if absolute- Returns:
- updated request
-
address
Description copied from interface:ClientRequestSocket address to use. This can be used to connect to a UNIX domain socket. Note that if UNIX domain socket address is configured, all other address configuration is ignored. This includes if it is configured as a base address on the client.An
InetSocketAddressupdates the logical URI host and port. AUnixDomainSocketAddressoverrides the physical transport only, so the request URI, resolved against the client base URI, still provides the logical HTTP authority. For TLS over a UNIX domain socket, the resolved URI host and port are used for SNI and endpoint identification, while the UNIX domain socket path is used only for transport.- Specified by:
addressin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
socketAddress- socket address to use, this will override any other address configuration- Returns:
- updated request
-
uri
Description copied from interface:ClientRequestConfigure request URI. This always replaces the existing URI (even if base URI is configured).- Specified by:
uriin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
uri- uri to resolve against base URI, or to use if absolute- Returns:
- updated request
-
path
Description copied from interface:ClientRequestConfigure path to call.- Specified by:
pathin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
uri- path- Returns:
- updated request
-
uri
Description copied from interface:ClientRequestConfigure URI.- Specified by:
uriin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
uri- uri to resolve against base URI, or to use if absolute- Returns:
- updated request
-
resolvedUri
Description copied from interface:ClientRequestResolved URI that will be used to invoke this request.- Specified by:
resolvedUriin interfaceClientRequest<T extends ClientRequest<T>>- Returns:
- URI to invoke
-
headers
Description copied from interface:ClientRequestGet a (mutable) instance of outgoing headers.- Specified by:
headersin interfaceClientRequest<T extends ClientRequest<T>>- Returns:
- client request headers
-
header
Description copied from interface:ClientRequestSet an HTTP header.- Specified by:
headerin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
header- header to set- Returns:
- updated request
-
headers
Description copied from interface:ClientRequestConfigure headers. Copy all headers from suppliedHeadersinstance.- Specified by:
headersin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
headers- to copy- Returns:
- updated request
-
headers
Description copied from interface:ClientRequestUpdate headers.- Specified by:
headersin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
headersConsumer- consumer of client request headers- Returns:
- updated request
-
fragment
Description copied from interface:ClientRequestSet fragment of the URI.- Specified by:
fragmentin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
fragment- fragment- Returns:
- updated request
-
skipUriEncoding
Description copied from interface:ClientRequestDisable uri encoding.- Specified by:
skipUriEncodingin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
skip- set totrueto disable URI encoding (falseby default)- Returns:
- updated client request
-
queryParam
Description copied from interface:ClientRequestAdd query parameter.- Specified by:
queryParamin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
name- name of parametervalues- value(s) of parameter- Returns:
- updated request
-
property
Description copied from interface:ClientRequestAdd a property to be used by this request.- Specified by:
propertyin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
propertyName- property namepropertyValue- property value- Returns:
- updated builder instance
-
pathParam
Description copied from interface:ClientRequestReplace a placeholder in URI with an actual value.- Specified by:
pathParamin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
name- name of parametervalue- value of parameter- Returns:
- updated request
-
followRedirects
Description copied from interface:ClientRequestWhether to follow redirects.- Specified by:
followRedirectsin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
followRedirects- follow redirects- Returns:
- updated request
-
maxRedirects
Description copied from interface:ClientRequestMax number of the followed redirects.- Specified by:
maxRedirectsin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
maxRedirects- max followed redirects- Returns:
- updated request
-
connection
Description copied from interface:ClientRequestThis method is for explicit connection use by this request.- Specified by:
connectionin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
connection- connection to use for this request- Returns:
- updated client request
-
clearConnection
public final void clearConnection()Clear an internally supplied connection without changing other request state. -
keepAlive
Description copied from interface:ClientRequestWhether to use keep alive with this request.- Specified by:
keepAlivein interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
keepAlive- use keep alive- Returns:
- updated client request
-
readTimeout
Description copied from interface:ClientRequestRead timeout for this request.- Specified by:
readTimeoutin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
readTimeout- response read timeout- Returns:
- updated client request
-
readContinueTimeout
Description copied from interface:ClientRequestRead 100-Continue timeout for this request. This read timeout is used when 100-Continue is sent by the client, before it sends an entity.- Specified by:
readContinueTimeoutin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
readContinueTimeout- read 100-Continue timeout duration- Returns:
- updated client request
- See Also:
-
proxy
Description copied from interface:ClientRequestProxy configuration for this specific request.- Specified by:
proxyin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
proxy- proxy configuration- Returns:
- updated request
-
request
Description copied from interface:ClientRequestRequest without an entity.- Specified by:
requestin interfaceClientRequest<T extends ClientRequest<T>>- Returns:
- response
-
requestWithoutRouteCleanup
Submit an internal request that participates in the enclosing top-level request's selected route.- Returns:
- response
-
submit
Description copied from interface:ClientRequestSubmit an entity.- Specified by:
submitin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
entity- request entity- Returns:
- response
-
outputStream
Description copied from interface:ClientRequestHandle output stream and submit the request.- Specified by:
outputStreamin interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
outputStreamConsumer- output stream to write request entity- Returns:
- response
-
sendExpectContinue
Description copied from interface:ClientRequestWhether Expect 100-Continue header is sent to verify server availability before sending an entity. Can be used to override the setting inherited fromHttpClientConfig.sendExpectContinue()on a per-request basis.- Specified by:
sendExpectContinuein interfaceClientRequest<T extends ClientRequest<T>>- Parameters:
sendExpectContinue- value to override behavior for a single request- Returns:
- updated client request
-
additionalHeaders
protected void additionalHeaders()Append additional headers before sending the request. -
method
HTTP method to be invoked.- Specified by:
methodin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- HTTP method
-
properties
Properties configured by a user or by other components.- Specified by:
propertiesin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- properties
-
followRedirects
public boolean followRedirects()Description copied from interface:ClientRequestWhether to follow redirects.- Specified by:
followRedirectsin interfaceClientRequest<T extends ClientRequest<T>>- Returns:
- follow redirects
-
maxRedirects
public int maxRedirects()Description copied from interface:ClientRequestMaximal number of redirects to follow. This is to prevent infinite redirects.- Specified by:
maxRedirectsin interfaceClientRequest<T extends ClientRequest<T>>- Returns:
- max number of redirects
-
tls
Description copied from interface:FullClientRequestTLS configuration (may be disabled - e.g. use plaintext).- Specified by:
tlsin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- TLS configuration
-
sni
Description copied from interface:FullClientRequestRequest-level SNI configuration.- Specified by:
sniin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- SNI configuration if configured
-
proxy
Description copied from interface:FullClientRequestProxy configuration (may be no-proxy).- Specified by:
proxyin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- proxy
-
selectedProxyRoute
Description copied from interface:FullClientRequestEffective proxy route already selected during the current top-level request invocation. The route may be shared with protocol fallbacks and other internal handoffs in that invocation.- Specified by:
selectedProxyRoutein interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- selected proxy route, or empty when this request still needs route selection
-
selectedProxyRoute
Description copied from interface:FullClientRequestRetain an effective proxy route while handing a request between protocol implementations in the current top-level request invocation. The default implementation validates and otherwise ignores the route.- Specified by:
selectedProxyRoutein interfaceFullClientRequest<T extends ClientRequest<T>>- Parameters:
proxyRoute- selected proxy route
-
clearSelectedProxyRoute
public void clearSelectedProxyRoute()Description copied from interface:FullClientRequestClear retained route state after the current top-level request invocation, or when it no longer matches a finalized request target. The default implementation has no effect.- Specified by:
clearSelectedProxyRoutein interfaceFullClientRequest<T extends ClientRequest<T>>
-
connection
Description copied from interface:FullClientRequestPossible explicit connection to use (such as when using a proxy).- Specified by:
connectionin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- client connection if explicitly defined
-
pathParams
Description copied from interface:FullClientRequestReplace a placeholder in URI with an actual value.- Specified by:
pathParamsin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- a map of path parameters
-
uri
Description copied from interface:FullClientRequestURI of this request.- Specified by:
uriin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- client URI
-
requestId
Description copied from interface:FullClientRequestRequest ID.- Specified by:
requestIdin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- id of this request
-
readTimeout
Description copied from interface:FullClientRequestRead timeout.- Specified by:
readTimeoutin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- read timeout of this request
-
readContinueTimeout
Description copied from interface:FullClientRequestRead 100-Continue timeout.- Specified by:
readContinueTimeoutin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- read 100-Continue timeout of this request
-
keepAlive
public boolean keepAlive()Description copied from interface:FullClientRequestWhether to use keep-alive connection (if relevant for the used HTTP version).- Specified by:
keepAlivein interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- whether to use keep alive
-
skipUriEncoding
public boolean skipUriEncoding()Description copied from interface:FullClientRequestWhether to skip URI encoding.- Specified by:
skipUriEncodingin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- whether to skip encoding
-
sendExpectContinue
Description copied from interface:FullClientRequestWhether Expect 100-Continue header is sent to verify server availability before sending an entity. Overrides the setting fromHttpClientConfig.sendExpectContinue().- Specified by:
sendExpectContinuein interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- Expect 100-Continue value if set
-
address
Description copied from interface:FullClientRequestAddress of the connection, if configured.- Specified by:
addressin interfaceFullClientRequest<T extends ClientRequest<T>>- Returns:
- socket address - may be an
InetSocketAddressorUnixDomainSocketAddress
-
doSubmit
-
doOutputStream
Submit a request entity provided through an output stream.- Parameters:
outputStreamHandler- output stream handler- Returns:
- HTTP client response
-
invokeServices
protected WebClientServiceResponse invokeServices(WebClientService.Chain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services.- Parameters:
httpCallChain- invocation of the HTTP request (the actual network call)whenSent- completable future to be completed when the request is sent over the networkwhenComplete- completable future to be completed when the request/response interaction finishesusedUri- URI configured on the request, combined with the base URI of the client- Returns:
- web client service response
-
invokeServices
protected WebClientServiceResponse invokeServices(WebClientService.WireProtocolChain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services.- Parameters:
httpCallChain- invocation of the HTTP request (the actual network call)whenSent- completable future to be completed when the request is sent over the networkwhenComplete- completable future to be completed when the request/response interaction finishesusedUri- URI configured on the request, combined with the base URI of the client- Returns:
- web client service response
-
invokeServices
protected WebClientServiceResponse invokeServices(WebClient webClient, WebClientService.TransportChain httpCallChain, CompletableFuture<WebClientServiceRequest> whenSent, CompletableFuture<WebClientServiceResponse> whenComplete, ClientUri usedUri) Invoke configured client services and publish applicable transport response context before they unwind.- Parameters:
webClient- client that owns the transport protocolshttpCallChain- invocation of the HTTP request (the actual network call)whenSent- completable future to be completed when the request is sent over the networkwhenComplete- completable future to be completed when the request/response interaction finishesusedUri- URI configured on the request, combined with the base URI of the client- Returns:
- web client service response
-
clientConfig
-
sanitizeRedirectSensitiveHeaders
protected final void sanitizeRedirectSensitiveHeaders(ClientUri requestUri, ClientRequestHeaders requestHeaders) Remove headers that must not cross redirect trust boundaries.- Parameters:
requestUri- URI that will be used for the requestrequestHeaders- headers to sanitize
-
crossesRedirectOriginBoundary
Whether a redirect from this request to the provided URI would cross, or has already crossed, an origin boundary.- Parameters:
requestUri- redirect request URI- Returns:
- whether redirect-sensitive headers should be stripped
-
mediaContext
Media context configured for this request.- Returns:
- media context
-
resolveUri
-