我正在开发一个http解析器,看起来boost.beast是一个不错的解析器。不过,我仍有一些问题:
*假设HTTP数据已经通过boost.asio套接字接收。存储在std::string缓冲区中。
非常感谢。
发布于 2018-05-23 22:46:54
从一个简单的例子开始:sync.cpp
// Declare a container to hold the response
http::response<http::dynamic_body> res;
// Receive the HTTP response
http::read(socket, buffer, res);提取标头
response对象已经包含了所有商品:
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;拔出身体
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";https://stackoverflow.com/questions/50479407
复制相似问题