C++ 使用 Boost.asio 和 Beast 库在正文中发送数据
C++ Send data in body with Boost.asio and Beast library
我必须使用 C++ 库将数据发送到我们公司的 REST-Web 服务。
我在 Ubuntu 16.04 环境中从 Code::Blocks 下的 Boost 和 Beast and with the example given here 开始。
该文档没有帮助我解决以下问题:
我的代码或多或少与示例相同,我可以成功编译并向我的测试网络服务发送 GET 请求。
但是我如何根据这个定义在请求 (req) 中设置数据:
:
beast::http::request<beast::http::string_body> req;
req.method("GET");
req.target("/");
:
我尝试使用一些 req.body.???
,但代码完成没有给我有关功能的提示(顺便说一句,不起作用)。我知道必须把req.method
改成"POST"才能发送数据
Google 没有显示关于此的新示例,仅找到上面的代码作为示例。
有人提示代码示例或使用关于 Beast (roar)。还是我应该使用 websockets?或者只有 boost::asio 喜欢回答 here?
提前致谢,请原谅我的英语不好。
要随请求发送数据,您需要填写正文并指定内容类型。
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";
Eliott Paris 回答的小补充:
设置 body 的正确语法是
req.body() = "name=foo";
你应该加上
req.prepare_payload();
在设置 body 后在 HTTP headers 中设置 body 大小。
我必须使用 C++ 库将数据发送到我们公司的 REST-Web 服务。 我在 Ubuntu 16.04 环境中从 Code::Blocks 下的 Boost 和 Beast and with the example given here 开始。 该文档没有帮助我解决以下问题:
我的代码或多或少与示例相同,我可以成功编译并向我的测试网络服务发送 GET 请求。
但是我如何根据这个定义在请求 (req) 中设置数据:
:
beast::http::request<beast::http::string_body> req;
req.method("GET");
req.target("/");
:
我尝试使用一些 req.body.???
,但代码完成没有给我有关功能的提示(顺便说一句,不起作用)。我知道必须把req.method
改成"POST"才能发送数据
Google 没有显示关于此的新示例,仅找到上面的代码作为示例。
有人提示代码示例或使用关于 Beast (roar)。还是我应该使用 websockets?或者只有 boost::asio 喜欢回答 here?
提前致谢,请原谅我的英语不好。
要随请求发送数据,您需要填写正文并指定内容类型。
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";
Eliott Paris 回答的小补充:
设置 body 的正确语法是
req.body() = "name=foo";
你应该加上
req.prepare_payload();
在设置 body 后在 HTTP headers 中设置 body 大小。