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

Public Member Functions

auto status () const noexcept -> Status
 
auto header (const std::string &key) const -> std::optional< std::string >
 
auto headers () const -> const std::unordered_map< std::string, std::string > &
 
auto empty () noexcept -> bool
 
auto body () -> std::istringstream &
 

Detailed Description

This class represents a non-streaming HTTP response.

Member Function Documentation

◆ body()

auto sourcemeta::hydra::http::ClientResponse::body ( ) -> std::istringstream &

Obtain the response body as an input stream. Getting the response body of an empty response is undefined behavior. Remember to check for this case using sourcemeta::hydra::http::ClientResponse::empty. For example:

#include <sourcemeta/hydra/http.h>
#include <cassert>
#include <iostream>
#include <iterator>
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);
if (!response.empty()) {
// Copy response body to standard output
std::copy(std::istreambuf_iterator<char>(response.body()),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(std::cout));
std::cout << "\n";
}
Definition http_request.h:21
auto method(const Method method) noexcept -> void
Definition http_response.h:20

◆ empty()

auto sourcemeta::hydra::http::ClientResponse::empty ( ) -> bool
noexcept

Check whether a response has a body to consume or not. A request made with the HEAD HTTP method is almost always empty. Remember to always check if a response is empty before calling sourcemeta::hydra::http::ClientResponse::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::HEAD);
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
assert(response.empty());

◆ header()

auto sourcemeta::hydra::http::ClientResponse::header ( const std::string &  key) const -> std::optional< std::string >

Get the value of a given response header, if any. Remember that you must express your desire of capturing the response headers you are interest in when performing the request, using sourcemeta::hydra::http::ClientRequest::capture.

#include <sourcemeta/hydra/http.h>
#include <cassert>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
// Remember to capture the headers you are interested in!
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");

◆ headers()

auto sourcemeta::hydra::http::ClientResponse::headers ( ) const -> const std::unordered_map< std::string, std::string > &

Get a container for all the captured response headers. For example:

#include <sourcemeta/hydra/http.h>
#include <iostream>
sourcemeta::hydra::http::ClientRequest request{"https://www.example.com"};
request.method(sourcemeta::hydra::http::Method::GET);
// Capture all headers
request.capture();
sourcemeta::hydra::http::ClientResponse response{request.send().get()};
for (const auto &[ key, value ]) {
std::cout << key << " -> " << value << "\n";
}

◆ status()

auto sourcemeta::hydra::http::ClientResponse::status ( ) const -> Status
noexcept

Get the status code of the response. 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);

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