rest — C ++ Отправка данных в теле с помощью библиотеки Boost.asio и Beast

Я должен использовать библиотеку C ++ для отправки данных в REST-Webservice нашей компании.
Я начинаю с Boost и зверь и с приведенным примером Вот под Code :: Blocks в среде Ubuntu 16.04.
Документация не помогла мне решить следующую проблему:

Мой код более или менее равен примеру, и я могу успешно скомпилировать и отправить GET-запрос в мой тестовый веб-сервис.

Но как я могу установить данные внутри запроса (req) из этого определения:

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

Я пытался использовать некоторые req.body.???, но завершение кода не дает мне подсказку о функциональности (кстати, не работает). я знаю это req.method необходимо изменить на «POST» для отправки данных.

Google не показывает новый пример по этому поводу, только приведенный выше код найден в качестве примера.

Кто-то с намеком на пример кода или используя про Зверя (рев). Или я должен использовать веб-сокеты? Или только boost :: asio вроде ответил Вот?

Заранее спасибо и извините за мой плохой английский.

7

Решение

Для отправки данных по вашему запросу вам необходимо заполнить тело и указать тип контента.

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";
8

Другие решения

Небольшое дополнение к ответу Элиота Париса:

  1. Правильный синтаксис для установки тела

    req.body() = "name=foo";
    
  2. Вы должны добавить

    req.prepare_payload();
    

    после установки тела, чтобы установить размер тела в заголовках HTTP.

7