Asynchronous HTTP/1.1 client using caller-provided fixed storage. More...
#include <HttpAsyncClient.h>
Classes | |
| struct | Header |
| struct | RequestOptions |
Public Member Functions | |
| Result | init (HttpConnectionBase &storage) |
| Initializes the client with caller-provided connection storage The storage must outlive the client and provides buffers, queues and socket state. | |
| Result | close () |
| Closes any active connection and releases references to the initialized storage. | |
| void | setResponseDecompression (SyncZLibTransformStream &decoder) |
| Enables opt-in gzip/deflate response decompression. | |
| void | clearResponseDecompression () |
| Disables response decompression for future requests. | |
| void | setTlsOptions (const HttpAsyncClientTlsOptions &options) |
| Sets TLS verification options used by future HTTPS transport integration. | |
| void | clearTlsOptions () |
| Restores default TLS verification options. | |
| const HttpAsyncClientTlsOptions & | getTlsOptions () const |
| void | setTransportSetup (Function< Result(HttpAsyncClientTransportSetup &)> &&setup) |
| Sets an optional transport setup hook invoked after TCP connect and before HTTP request bytes are sent. | |
| void | clearTransportSetup () |
| Clears the optional transport setup hook and restores default socket transport setup. | |
| Result | detachWebSocketTransport (HttpWebSocketTransportView &transport) |
Hands the connected socket streams to a WebSocket owner after a validated 101 response. | |
| Result | start (AsyncEventLoop &loop, HttpParser::Method method, StringSpan url, bool keepAlive=false) |
Starts a request that must be configured inside onPrepareRequest onPrepareRequest must send the headers before returning, typically by calling HttpAsyncClientRequest::sendHeaders(). | |
| Result | sendRequest (AsyncEventLoop &loop, const RequestOptions &options) |
| Starts an auto-sent request described by caller-owned request options. | |
| Result | get (AsyncEventLoop &loop, StringSpan url, bool keepAlive=false) |
| Convenience wrapper for a GET request without a request body. | |
| Result | head (AsyncEventLoop &loop, StringSpan url, bool keepAlive=false) |
| Convenience wrapper for a HEAD request without a request body. | |
| Result | options (AsyncEventLoop &loop, StringSpan url, bool keepAlive=false) |
| Convenience wrapper for an OPTIONS request without a request body. | |
| Result | deleteRequest (AsyncEventLoop &loop, StringSpan url, bool keepAlive=false) |
| Convenience wrapper for a DELETE request without a request body. | |
| Result | put (AsyncEventLoop &loop, StringSpan url, Span< const char > body, bool keepAlive=false) |
| Convenience wrapper for a PUT request with a fixed in-memory body. | |
| Result | put (AsyncEventLoop &loop, StringSpan url, StringSpan body, bool keepAlive=false) |
| Result | post (AsyncEventLoop &loop, StringSpan url, Span< const char > body, bool keepAlive=false) |
| Convenience wrapper for a POST request with a fixed in-memory body. | |
| Result | post (AsyncEventLoop &loop, StringSpan url, StringSpan body, bool keepAlive=false) |
| Result | patch (AsyncEventLoop &loop, StringSpan url, Span< const char > body, bool keepAlive=false) |
| Convenience wrapper for a PATCH request with a fixed in-memory body. | |
| Result | patch (AsyncEventLoop &loop, StringSpan url, StringSpan body, bool keepAlive=false) |
| Result | postMultipart (AsyncEventLoop &loop, StringSpan url, HttpMultipartWriter &writer, bool keepAlive=false) |
| Convenience wrapper for a multipart/form-data POST request. | |
| HttpAsyncClientResponse & | getResponse () |
| const HttpAsyncClientResponse & | getResponse () const |
Public Attributes | |
| Function< void(HttpAsyncClientRequest &)> | onPrepareRequest |
| Called after the request has been created and can still be customized. | |
| Function< void(HttpAsyncClientResponse &)> | onResponse |
| Called after the response headers have been parsed. | |
| Function< void(Result)> | onError |
| Called on connection, protocol or streaming errors. | |
Asynchronous HTTP/1.1 client using caller-provided fixed storage.
HttpAsyncClient processes a single request at a time and can sequentially reuse the same connection when keep-alive is enabled and the next request targets the same host and port.
Use the convenience wrappers (get, head, put, post, patch, deleteRequest, options, postMultipart) when the request body is already available in memory. Use start() when the request must be customized inside onPrepareRequest, for example to stream the request body with HttpAsyncClientRequest::setBody(AsyncReadableStream&, uint64_t) or to write it manually through HttpAsyncClientRequest::getWritableStream().
onResponse is called after response headers have been parsed. The response body is then read incrementally from HttpAsyncClientResponse::getReadableStream(), and the readable stream eventEnd signals the end of the response body.
Example without a streamed request body:
Example streaming the request body:
|
inline |
Disables response decompression for future requests.
|
inline |
Restores default TLS verification options.
|
inline |
Clears the optional transport setup hook and restores default socket transport setup.
| Result SC::HttpAsyncClient::close | ( | ) |
Closes any active connection and releases references to the initialized storage.
| Result SC::HttpAsyncClient::deleteRequest | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a DELETE request without a request body.
| Result SC::HttpAsyncClient::detachWebSocketTransport | ( | HttpWebSocketTransportView & | transport | ) |
Hands the connected socket streams to a WebSocket owner after a validated 101 response.
| Result SC::HttpAsyncClient::get | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a GET request without a request body.
| Result SC::HttpAsyncClient::head | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a HEAD request without a request body.
| Result SC::HttpAsyncClient::init | ( | HttpConnectionBase & | storage | ) |
Initializes the client with caller-provided connection storage The storage must outlive the client and provides buffers, queues and socket state.
| Result SC::HttpAsyncClient::options | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| bool | keepAlive = false ) |
Convenience wrapper for an OPTIONS request without a request body.
| Result SC::HttpAsyncClient::patch | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| Span< const char > | body, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a PATCH request with a fixed in-memory body.
| Result SC::HttpAsyncClient::post | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| Span< const char > | body, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a POST request with a fixed in-memory body.
| Result SC::HttpAsyncClient::postMultipart | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| HttpMultipartWriter & | writer, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a multipart/form-data POST request.
| Result SC::HttpAsyncClient::put | ( | AsyncEventLoop & | loop, |
| StringSpan | url, | ||
| Span< const char > | body, | ||
| bool | keepAlive = false ) |
Convenience wrapper for a PUT request with a fixed in-memory body.
| Result SC::HttpAsyncClient::sendRequest | ( | AsyncEventLoop & | loop, |
| const RequestOptions & | options ) |
Starts an auto-sent request described by caller-owned request options.
|
inline |
Enables opt-in gzip/deflate response decompression.
The caller owns the transform and must initialize its read/write queues with the client's buffer pool before starting a request. When a response declares Content-Encoding: gzip or deflate, onResponse observes the decoded body through HttpAsyncClientResponse::getReadableStream().
|
inline |
Sets TLS verification options used by future HTTPS transport integration.
|
inline |
Sets an optional transport setup hook invoked after TCP connect and before HTTP request bytes are sent.
The hook can leave the socket streams active for plain HTTP, or install alternate active streams and complete later. This keeps TLS and other transport adapters outside the core Http library.
| Result SC::HttpAsyncClient::start | ( | AsyncEventLoop & | loop, |
| HttpParser::Method | method, | ||
| StringSpan | url, | ||
| bool | keepAlive = false ) |
Starts a request that must be configured inside onPrepareRequest onPrepareRequest must send the headers before returning, typically by calling HttpAsyncClientRequest::sendHeaders().
| Function<void(Result)> SC::HttpAsyncClient::onError |
Called on connection, protocol or streaming errors.
| Function<void(HttpAsyncClientRequest&)> SC::HttpAsyncClient::onPrepareRequest |
Called after the request has been created and can still be customized.
| Function<void(HttpAsyncClientResponse&)> SC::HttpAsyncClient::onResponse |
Called after the response headers have been parsed.