当社のREST-Webサービスにデータを送信するためにC++ライブラリを使用する必要があります。私はBoostと Beast から始め、Ubuntu16.04環境のCode :: Blocksの下に here という例を示します。ドキュメントは、次の問題で私を助けませんでした:
私のコードは多かれ少なかれ例と同じであり、GETリクエストをコンパイルしてテストWebサービスに正常に送信できます。
しかし、この定義からリクエスト(req)内にデータを設定するにはどうすればよいですか?
:
beast::http::request<beast::http::string_body> req;
req.method("GET");
req.target("/");
:
req.body.???
を使用しようとしましたが、コードを完了しても機能についてのヒントが得られません(ところで、機能しません)。データを送信するには、req.method
を「POST」に変更する必要があることを知っています。
Googleはこれに関する新しい例を示していません。例として、上記のコードのみが見つかります。
コード例のヒントを持っている人、または獣について使用している人(roar)。または、WebSocketを使用する必要がありますか?または単にboost :: asioのように答えた ここ ?
事前に感謝し、私の悪い英語を許します。
リクエストとともにデータを送信するには、本文に入力してコンテンツタイプを指定する必要があります。
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";
エリオットパリの答えへの小さな追加:
本文を設定するための正しい構文は
req.body() = "name=foo";
追加する必要があります
req.prepare_payload();
hTTPヘッダーで本体サイズを設定するように本体を設定した後。