Начиная с простого примера: https://www.boost.org/doc/libs/develop/libs/beast/example/http/client/sync/http_client_sync.cpp
// Declare a container to hold the response
http::response<http::dynamic_body> res;
// Receive the HTTP response
http::read(socket, buffer, res);
Извлечение заголовков
Объект ответа уже содержит все товары:
for(auto const& field : res)
std::cout << field.name() << " = " << field.value() << "\n";
std::cout << "Server: " << res[http::field::server] << "\n";
Вы можететакже просто выполните потоковую передачу всего объекта ответа:
std::cout << res << std::endl;
Extract The Body
std::cout << "Body size is " << res.body().size() << "\n";
Чтобы фактически использовать «dynamic_body», используйте стандартную манипуляцию с буфером Asio:
#include <boost/asio/buffers_iterator.hpp>
#include <boost/asio/buffers_iterator.hpp>
std::string body { boost::asio::buffers_begin(res.body().data()),
boost::asio::buffers_end(res.body().data()) };
std::cout << "Body: " << std::quoted(body) << "\n";
В качестве альтернативы см. beast::buffers_to_string
Очевидно, что при использовании string_body
:
std::cout << "Body: " << std::quoted(res.body()) << "\n";
все становится более простым.