我将使用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?
提前致谢,请原谅我糟糕的英语。
答案 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的回答很少:
设置正文的正确语法是
req.body() = "name=foo";
您应该添加
req.prepare_payload();
设置正文以在HTTP标头中设置正文大小后。