C ++使用Boost.asio和Beast库在body中发送数据

时间:2017-06-02 14:25:06

标签: c++ rest boost boost-beast

我将使用C ++库将数据发送到我们公司的REST-Web服务。 我从Boost和Beast以及Ubuntu 16.04环境中Code :: Blocks下的here示例开始。 该文档没有帮助我解决问题:

我的代码或多或少等于示例,我可以成功编译并向我的测试Web服务发送GET请求。

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

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

我尝试使用一些req.body.???,但代码completition没有给我一些关于功能的提示(顺便说一句。不行)。我知道必须将req.method更改为“POST”才能发送数据。

Google没有显示有关此问题的新示例,仅查找上述代码作为示例。

有人提示代码示例或使用关于野兽(怒吼)的人。或者我应该使用websockets?或者只有boost :: asio就像回答here

提前致谢,请原谅我糟糕的英语。

2 个答案:

答案 0 :(得分:9)

要根据您的请求发送数据,您需要填写正文并指定内容类型。

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

如果您想将“key = value”作为“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";

答案 1 :(得分:8)

对Eliott Paris的回答很少:

  1. 设置正文的正确语法是

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

    req.prepare_payload();
    
    设置正文以在HTTP标头中设置正文大小后