10

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

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

但是我怎样才能在这个定义的请求(req)中设置数据:

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

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

谷歌没有显示关于此的新示例,仅找到上述代码作为示例。

有人提示代码示例或使用 about the Beast ( roar )。或者我应该使用 websockets 吗?或者只有 boost::asio 喜欢在这里回答?

在此先感谢并原谅我的英语不好。

4

2 回答 2

15

Eliott Paris 回答的小补充:

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

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

    req.prepare_payload();
    

    在设置正文以在 HTTP 标头中设置正文大小之后。

于 2017-10-27T20:36:47.147 回答
13

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

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";
于 2017-07-17T12:14:23.060 回答