Represents a client-side HTTP request.

Instances are created by an HttpClient instance, via one of the methods corresponding to the specific HTTP methods, or the generic request methods. On creation the request will not have been written to the wire.

Once a request has been obtained, headers can be set on it, and data can be written to its body if required. Once you are ready to send the request, one of the end methods should be called.

Nothing is actually sent until the request has been internally assigned an HTTP connection.

The HttpClient instance will return an instance of this class immediately, even if there are no HTTP connections available in the pool. Any requests sent before a connection is assigned will be queued internally and actually sent when an HTTP connection becomes available from the pool.

The headers of the request are queued for writing either when the end method is called, or, when the first part of the body is written, whichever occurs first.

This class supports both chunked and non-chunked HTTP.

It implements WriteStream so it can be used with Pump to pump data with flow control.

An example of using this class is as follows:

- `Anything`
  - `Object`
    - `Basic` ...and other supertypes
      - `HttpClientRequest` ...and other supertypes

- `HttpClientRequest`
  - `Basic`
    - `Identifiable`
    - `Object`
      - `Anything`
  - `ReadStream`
    - `StreamBase`
  - `WriteStream`
    - `StreamBase`

no subtypes hierarchy

Initializer
`HttpClientRequest(HttpClientRequest unknown)`

Inherited Attributes
Attributes inherited from: `Object` `hash`, `string`

Methods
`connection` | `shared default HttpConnection connection()` @return the HttpConnection associated with this request
`connectionHandler` | `shared default HttpClientRequest connectionHandler(Anything(HttpConnection)? handler)` Set a connection handler called when an HTTP connection has been established. Parameters: `handler` the handler
`continueHandler` | `shared default HttpClientRequest continueHandler(Anything()? handler)` If you send an HTTP request with the header `Expect` set to the value `100-continue` and the server responds with an interim HTTP response with a status code of `100` and a continue handler has been set using this method, then the `handler` will be called. You can then continue to write data to the request body and later end it. This is normally used in conjunction with the sendHead method to force the request header to be written before the request has ended.
`drainHandler` | `shared actual default HttpClientRequest drainHandler(Anything()? handler)` Set a drain handler on the stream. If the write queue is full, then the handler will be called when the write queue has been reduced to maxSize / 2. See Pump for an example of this being used. Refines `WriteStream.drainHandler`
`end` | `shared actual default void end()` Ends the request. If no data has been written to the request body, and sendHead has not been called then the actual request won't get written until this method gets called. Once the request has ended, it cannot be used any more, Refines `WriteStream.end`
`end` | `shared actual default void end(Buffer chunk)` Same as end but writes some data to the request body before ending. If the request is not chunked and no other data has been written then the `Content-Length` header will be automatically set Refines `WriteStream.end`
`end` | `shared default void end(String chunk)` Same as end but writes a String in UTF-8 encoding
`end` | `shared default void end(String chunk, String enc)` Same as end but writes a String with the specified encoding
`endHandler` | `shared actual default HttpClientRequest endHandler(Anything()? endHandler)` Set an end handler. Once the stream has ended, and there is no more data to be read, this handler will be called. Refines `ReadStream.endHandler`
`exceptionHandler` | `shared actual default HttpClientRequest exceptionHandler(Anything(Throwable)? handler)` Set an exception handler. Refines `StreamBase.exceptionHandler`
`getHost` | `shared default String getHost()` @return the request host. For HTTP2 it returns the pseudo header otherwise it returns the header
`getRawMethod` | `shared default String getRawMethod()` @return the raw value of the method this request sends
`handler` | `shared actual default HttpClientRequest handler(Anything(HttpClientResponse)? handler)` Set a data handler. As data is read, the handler will be called with the data. Refines `ReadStream.handler`
`headers` | `shared default MultiMap headers()` @return The HTTP headers
`isChunked` | `shared default Boolean isChunked()` @return Is the request chunked?
`method` | `shared default HttpMethod method()` The HTTP method for the request.
`path` | `shared default String path()` @return The path part of the uri. For example /somepath/somemorepath/someresource.foo
`pause` | `shared actual default HttpClientRequest pause()` Pause the `ReadSupport`. While it's paused, no data will be sent to the `dataHandler` Refines `ReadStream.pause`
`pushHandler` | `shared default HttpClientRequest pushHandler(Anything(HttpClientRequest) handler)` Set a push handler for this request. The handler is called when the client receives a push promise from the server. The handler can be called multiple times, for each push promise. The handler is called with a read-only HttpClientRequest, the following methods can be called: [method](../http/HttpClientRequest.type.html#method) [uri](../http/HttpClientRequest.type.html#uri) [headers](../http/HttpClientRequest.type.html#headers) [getHost](../http/HttpClientRequest.type.html#getHost) In addition the handler should call the handler method to set an handler to process the response. Parameters: `handler` the handler
`putHeader` | `shared default HttpClientRequest putHeader(String name, String value)` Put an HTTP header Parameters: `name` The header name `value` The header value
`query` | `shared default String query()` @return the query part of the uri. For example someparam=32&someotherparam=x
`reset` | `shared default void reset()` Reset this stream with the error code `0`.
`reset` | `shared default void reset(Integer code)` Reset this stream with the error `code`. Parameters: `code` the error code
`resume` | `shared actual default HttpClientRequest resume()` Resume reading. If the `ReadSupport` has been paused, reading will recommence on it. Refines `ReadStream.resume`
`sendHead` | `shared default HttpClientRequest sendHead()` Forces the head of the request to be written before end is called on the request or any data is written to it. This is normally used to implement HTTP 100-continue handling, see for more information.
`sendHead` | `shared default HttpClientRequest sendHead(Anything(HttpVersion) completionHandler)` Like sendHead but with an handler after headers have been sent. The handler will be called with the HttpVersion if it can be determined or null otherwise.
`setChunked` | `shared default HttpClientRequest setChunked(Boolean chunked)` If chunked is true then the request will be set into HTTP chunked mode Parameters: `chunked` true if chunked encoding
`setHost` | `shared default HttpClientRequest setHost(String host)` Set the request host. For HTTP2 it sets the pseudo header otherwise it sets the header
`setRawMethod` | `shared default HttpClientRequest setRawMethod(String method)` Set the value the method to send when the method is used. Parameters: `method` the raw method
`setTimeout` | `shared default HttpClientRequest setTimeout(Integer timeoutMs)` Set's the amount of time after which if the request does not return any data within the timeout period an `java.util.concurrent.TimeoutException` will be passed to the exception handler (if provided) and the request will be closed. Calling this method more than once has the effect of canceling any existing timeout and starting the timeout from scratch. Parameters: `timeoutMs` The quantity of time in milliseconds.
`setWriteQueueMaxSize` | `shared actual default HttpClientRequest setWriteQueueMaxSize(Integer maxSize)` Set the maximum size of the write queue to `maxSize`. You will still be able to write to the stream even if there is more than `maxSize` bytes in the write queue. This is used as an indicator by classes such as `Pump` to provide flow control. Refines `WriteStream.setWriteQueueMaxSize`
`streamId` | `shared default Integer streamId()` @return the id of the stream of this response, when it is not yet determined, i.e
         the request has not been yet sent or it is not supported HTTP/1.x
`uri` | `shared default String uri()` @return The URI of the request.
`write` | `shared actual default HttpClientRequest write(Buffer data)` @throws java.lang.IllegalStateException when no response handler is set Refines `WriteStream.write`
`write` | `shared default HttpClientRequest write(String chunk)` Write a `String` to the request body, encoded as UTF-8.
`write` | `shared default HttpClientRequest write(String chunk, String enc)` Write a `String` to the request body, encoded using the encoding `enc`.
`writeCustomFrame` | `shared default HttpClientRequest writeCustomFrame(HttpFrame frame)` Like writeCustomFrame but with an HttpFrame. Parameters: `frame` the frame to write
`writeCustomFrame` | `shared default HttpClientRequest writeCustomFrame(Integer type, Integer flags, Buffer payload)` Write an HTTP/2 frame to the request, allowing to extend the HTTP/2 protocol. The frame is sent immediatly and is not subject to flow control. This method must be called after the request headers have been sent and only for the protocol HTTP/2. The sendHead should be used for this purpose. Parameters: `type` the 8-bit frame type `flags` the 8-bit frame flags `payload` the frame payload
`writeQueueFull` | `shared actual default Boolean writeQueueFull()` This will return `true` if there are more bytes in the write queue than the value set using setWriteQueueMaxSize Refines `WriteStream.writeQueueFull`

Inherited Methods
Methods inherited from: `Object` `equals`
Methods inherited from: `ReadStream<T>` `endHandler()`, `exceptionHandler()`, `handler()`, `pause()`, `resume()`
Methods inherited from: `StreamBase` `exceptionHandler()`
Methods inherited from: `WriteStream<T>` `drainHandler()`, `end()`, `exceptionHandler()`, `setWriteQueueMaxSize()`, `write()`, `writeQueueFull()`