= nng_http_client_transact(3http) // // Copyright 2018 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This document is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this // file was obtained (LICENSE.txt). A copy of the license may also be // found online at https://opensource.org/licenses/MIT. // == NAME nng_http_client_transact - perform one HTTP transaction == SYNOPSIS [source, c] ---- #include #include void nng_http_client_transact(nng_http_client *client, nng_http_req *req, nng_http_res *res, nng_aio *aio); ---- == DESCRIPTION The `nng_http_client_transact()` function is used to perform a complete HTTP exchange. It creates a new connection using _client_, performs the transaction by sending the request _req_ (and attached body data) to the remote server, then reading the response _res_, and finally closes the connection that it created. The entire response is read, including any associated body, which can subsequently be obtained using xref:nng_http_res_get_data.3http.adoc[`nng_http_res_get_data()`]. This function is intended to make creation of client applications easier, by performing multiple asynchronous operations required to complete an entire HTTP transaction. A similar function, xref:nng_http_conn_transact.3http.adoc[`nng_http_conn_transact()`], exists. That function behaves similarily, but uses an existing connection, which can be reused. NOTE: This function does not support reading data sent using chunked transfer encoding, and if the server attempts to do so, the underlying connection will be closed and an `NNG_ENOTSUP` error will be returned. This limitation is considered a bug, and a fix is planned for the future. WARNING: If the remote server tries to send an extremely large buffer, then a corresponding allocation will be made, which can lead to denial of service attacks. Client applications should take care to use this only with reasonably trust-worthy servers. This function returns immediately, with no return value. Completion of the operation is signaled via the _aio_, and the final result may be obtained via xref:nng_aio_result.3.adoc[`nng_aio_result()`]. That result will either be zero or an error code. == RETURN VALUES None. == ERRORS [horizontal] `NNG_ECANCELED`:: The operation was canceled. `NNG_ECLOSED`:: The connection was closed. `NNG_ECONNRESET`:: The peer closed the connection. `NNG_ENOMEM`:: Insufficient free memory to perform the operation. `NNG_ENOTSUP`:: HTTP operations are not supported, or peer sent chunked encoding. `NNG_EPROTO`:: An HTTP protocol error occurred. `NNG_ETIMEDOUT`:: Timeout waiting for data from the connection. == SEE ALSO [.text-left] xref:nng_aio_alloc.3.adoc[nng_aio_alloc(3)], xref:nng_aio_result.3.adoc[nng_aio_result(3)], xref:nng_strerror.3.adoc[nng_strerror(3)], xref:nng_http_client_connect.3http.adoc[nng_http_client_connect(3http)], xref:nng_http_conn_transact.3http.adoc[nng_http_conn_transact(3http)], xref:nng_http_res_get_data.3http.adoc[nng_http_res_get_data(3http)], xref:nng.7.adoc[nng(7)]