1

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 本文を解析する必要があります。

4

0 に答える 0