2017-06-02 15 views
3

私は、私たちのREST-Webserviceにデータを送信するためにC++ライブラリを使用しました。 私はBoostとBeastから始まり、例題はhereで、Ubuntu 16.04環境のCode :: Blocksにあります。 問題を解決する上で、このドキュメントは役に立ちませんでした。C++ Boost.asioとBeastライブラリでデータを本体に送信

私のコードは多かれ少なかれこの例と同じで、コンパイルしてGETリクエストをテストWebサービスに正常に送信できます。

しかし、どのように私はこの定義からの要求(REQ)内のデータを設定することができます。

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

私はいくつかのreq.body.???を使用しようとしましたが、コードcompletitionがところで(私の機能についてのヒントを与えるものではありませんドンを。仕事はしません)。私はreq.methodを "POST"に変更してデータを送信する必要があることを知っています。

Googleではこれに関する新しい例を示していません。例として、上記のコードのみが見つかりました。

コード例やビーストについてのヒント(轟音)を持っている人。または、Webソケットを使用する必要がありますか?または単にboost :: asioと答えたhere

ありがとうございました。私の悪い英語をお待ちしています。

答えて

4

ご要望に応じてデータを送信するには、本文を入力してコンテンツタイプを指定する必要があります。

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

またはRAWデータ:

req.set(beast::http::field::content_type, "text/plain"); 
req.body = "Some raw data"; 
2

少量の添加エリオットパリの答え:

  1. bodを設定するための正しい構文yが

    req.body() = "name=foo"; 
    
  2. であるあなたは、HTTPヘッダにボディサイズを設定するために身体を設定した後

    req.prepare_payload(); 
    

    を追加する必要があります。

関連する問題