2

我在一个项目中使用cpprestsdk作为服务器。我需要阅读 put 请求的正文。

文档使用message.body().read_to_end(buffer);

我试过这个没有成功。

void MyProject::handle_post(http_request message)
{
        Concurrency::streams::streambuf<uint8_t> buffer;
        buffer.alloc(10); // Crashes Here
        message.body().read_to_end(buffer);
        ...

我究竟做错了什么?如何从该缓冲区分配和读取数据?

4

2 回答 2

1

面对同样的问题,我选择不使用read_to_end,因为我发现的每个解决方案都会引发异常。事实证明,这不是提取尸体的最简单方法。

要从 http_message 正文中提取数据(无论 MIME 类型如何),我使用以下

const auto data = message.content_ready().get().extract_vector().get();
const utility::string_t body = { data.begin(), data.end() };

std::string如果您在所有情况下都需要,我可以提供的另一个选择是

const auto body = response.content_ready().get().extract_utf8string(true).get();

这也是访问数据的非常方便的方式。

于 2019-06-21T13:59:22.877 回答
0

您可以使用它来将正文读取到文件中:

    auto fileStream = concurrency::streams::fstream::open_ostream(utility::conversions::to_string_t(filepath), std::ios::out | std::ios::binary).get();

    // Get body from request
    auto bodyStream = request.body();

    // Write input from request body directly to output filestream
    bodyStream.read_to_end(fileStream.streambuf()).wait();
    fileStream.close().wait();
于 2020-12-11T07:54:54.873 回答