C 使用BOOST.ASIO和BEAST库中的身体发送数据

C++ Send data in body with Boost.asio and Beast library

本文关键字:数据 BOOST 使用 ASIO BEAST      更新时间:2023-10-16

我已经使用C 库将数据发送到我们公司的REST-WEBSERVICE。我从Boost and Beast开始,并从Code :: Ubuntu 16.04 Enviroment中给出的示例开始。该文档在以下问题中没有帮助:

我的代码或多或少都等于示例,我可以成功地编译并向我的测试Web服务发送一个重新要求。

但是如何从此定义中设置请求(req(内的数据:

:
beast::http::request<beast::http::string_body> req;
req.method("GET");
req.target("/");
:

我尝试使用一些req.body.???,但是代码完成并没有给我一个有关功能的提示(顺便说一句。不起作用(。我知道必须将req.method更改为"帖子"以发送数据。

Google并未显示有关此的新示例,只有上述代码作为示例。

有人暗示了代码示例或使用野兽(咆哮(。还是我应该使用Websocket?或者只有boost :: asio喜欢在这里回答?

提前感谢并原谅我的英语不好。

埃利奥特(Eliott Paris(答案的小补充:

  1. 正确的设置字体语法是

    req.body() = "name=foo";
    
  2. 您应该添加

    req.prepare_payload();
    

    将身体设置为在HTTP标头中设置身体大小后。

要用您的请求发送数据,您需要填充身体并指定内容类型。

beast::http::request<beast::http::string_body> req;
req.method(beast::http::verb::post);
req.target("/");

如果要将"键=值"发送为" x-www-form-urlenCoded"对:

req.set(beast::http::field::content_type, "application/x-www-form-urlencoded");
req.body() = "name=foo";

或原始数据:

req.set(beast::http::field::content_type, "text/plain");
req.body() = "Some raw data";