Hydra 0.0.1
A convenience networking library for modern C++
 
Loading...
Searching...
No Matches
sourcemeta::hydra::http::ClientRequest Class Reference

Public Member Functions

 ClientRequest (std::string url)
 
auto method (const Method method) noexcept -> void
 
auto method () const noexcept -> Method
 
auto capture (std::string header) -> void
 
auto capture (std::initializer_list< std::string > headers) -> void
 
auto capture () -> void
 
auto header (std::string_view key, std::string_view value) -> void
 
auto header (std::string_view key, int value) -> void
 
auto url () const -> std::string_view
 
auto send () -> ClientResponse
 
auto send (std::istream &body) -> ClientResponse
 

Detailed Description

This class is used to perform a non-streaming HTTP request.

Constructor & Destructor Documentation

◆ ClientRequest()

sourcemeta::hydra::http::ClientRequest::ClientRequest ( std::string  url)

Construct an HTTP request to a given URL. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.status() == sourcemeta::hydra::http::Status::OK);
Definition http_request.h:21
auto method(const Method method) noexcept -> void
Definition http_response.h:20

Member Function Documentation

◆ capture() [1/3]

auto sourcemeta::hydra::http::ClientRequest::capture ( ) -> void

Express a desire of capturing every response headers. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
request.capture();
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.header("content-type").has_value());
assert(response.header("content-encoding").has_value());

◆ capture() [2/3]

auto sourcemeta::hydra::http::ClientRequest::capture ( std::initializer_list< std::string >  headers) -> void

Express a desire of capturing a set of response headers, if sent by the server.

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
request.capture({ "content-type", "content-encoding", "x-foo" });
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.header("content-type").has_value());
assert(response.header("content-encoding").has_value());
assert(!response.header("x-foo").has_value());

◆ capture() [3/3]

auto sourcemeta::hydra::http::ClientRequest::capture ( std::string  header) -> void

Express a desire of capturing a specific response header, if sent by the server.

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
request.capture("content-type");
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.header("content-type").has_value());
assert(response.header("content-type").value()
== "text/html; charset=UTF-8");

◆ header() [1/2]

auto sourcemeta::hydra::http::ClientRequest::header ( std::string_view  key,
int  value 
) -> void

Set an HTTP request header whose value is an integer. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.header("X-Favourite-Number", 3);
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.status() == sourcemeta::hydra::http::Status::OK);
auto header(std::string_view key, std::string_view value) -> void

◆ header() [2/2]

auto sourcemeta::hydra::http::ClientRequest::header ( std::string_view  key,
std::string_view  value 
) -> void

Set an HTTP request header. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.header("X-Send-With", "Hydra");
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.status() == sourcemeta::hydra::http::Status::OK);

◆ method() [1/2]

auto sourcemeta::hydra::http::ClientRequest::method ( ) const -> Method
noexcept

Retrieve the HTTP method that the request will be sent with. For example:

#include <sourcemeta/hydra/http.h>
#include <iostream>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::HEAD);
assert(request.method() == sourcemeta::hydra::http::Method::HEAD);

◆ method() [2/2]

auto sourcemeta::hydra::http::ClientRequest::method ( const Method  method) -> void
noexcept

Specify the HTTP method to use for the request. If not set, it defauls to GET. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
// Send a POST request
request.method(sourcemeta::hydra::http::Method::POST);
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.status() == sourcemeta::hydra::http::Status::OK);

◆ send() [1/2]

auto sourcemeta::hydra::http::ClientRequest::send ( ) -> ClientResponse

Perform the HTTP request without a body. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
sourcemeta::hydra::http::ClientResponse response{request.send()};
assert(response.status() == sourcemeta::hydra::http::Status::OK);

◆ send() [2/2]

auto sourcemeta::hydra::http::ClientRequest::send ( std::istream &  body) -> ClientResponse

Perform the HTTP request with a body. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
#include <sstream>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
std::istringstream body{"hello world"};
request.send(body)};
assert(response.status() == sourcemeta::hydra::http::Status::OK);

◆ url()

auto sourcemeta::hydra::http::ClientRequest::url ( ) const -> std::string_view

Retrieve the URL that the request will be sent to. For example:

#include <sourcemeta/hydra/http.h>
#include <iostream>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
std::cout << request.url() << "\n";
auto url() const -> std::string_view

The documentation for this class was generated from the following file: