首页 > 解决方案 > 如何从 boost beast http_parser 获取 http 请求正文?

问题描述

如何从 http_request 获取请求正文?我试过http_request.body(),不行,http_request.body()返回一个空字符串。

#include "pch.h"
#include <iostream>
#include <boost/beast.hpp>

int main()
{

    std::string s =
        "POST /cgi/message.php HTTP/1.1\r\n"
        "Content-Length: 5\r\n"
        "\r\n"
        "abcde";
    boost::system::error_code ec;
    boost::beast::http::request_parser<boost::beast::http::string_body> p;
    p.put(boost::asio::buffer(s), ec);

    boost::beast::http::request<boost::beast::http::string_body> r = p.get();
    auto b = r.body(); // !!! b is an empty string! can't get request body! 


    std::cout << "Hello World!\n"; 
}

编辑:现在,我知道为什么我不能获取请求正文,默认情况下,第一次调用 http_parser.put(),http_parser 只解析 http 行和 http 字段,下次调用 http_parser.put(),http_parser 将解析 http邮件正文。如果我们有一个完整的 http 消息已经包含了 http 正文,在将完整的 http 请求发送到 http_parser 之前,我们必须调用 http_request.eager(true) 来控制 http_parser 现在解析 http 正文。

标签: c++httpboostbeast

解决方案


推荐阅读