2017-07-12 9 views
0

私はいくつかのjson-CodeをC++からPython Flask Rest Apiに渡そうとしています。しかし、生憎これは動作しませんし、私のミスが表示されない:(libcurlがjson-Dataを送信しない

これは私のCコードです:

#include <stdio.h> 
#include <curl/curl.h> 
#include <string> 

using namespace std; 

int main(void) 
{ 
     CURL *curl; 
     CURLcode res; 

     curl_global_init(CURL_GLOBAL_ALL); 

     curl = curl_easy_init(); 
     if(curl) { 
       curl_easy_setopt(curl, CURLOPT_URL, "localhost:5000/todo/api/v1.0/tasks/debug"); 
       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\" : \"The Title\"}"); 

       struct curl_slist *headers = NULL; 
       curl_slist_append(headers, "Accept: application/json"); 
       curl_slist_append(headers, "Content-Type: application/json"); 
       curl_slist_append(headers, "charsets: utf-8"); 

       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); 
       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 

       res = curl_easy_perform(curl); 

       if(res != CURLE_OK) 
         fprintf(stderr, "curl_easy_perform() failed: %s\n", 
             curl_easy_strerror(res)); 

       curl_easy_cleanup(curl); 
     } 
     curl_global_cleanup(); 
     return 0; 
} 

これはフラスコ機能である:

#POST DEBUG 
@app.route("/todo/api/v1.0/tasks/debug", methods=['POST']) 
def echo(): 
     print(request.json) 
     return "ReturnString \n" 

出力フラスコ - サーバーの外観は次のようになります。

None 
127.0.0.1 - - [12/Jul/2017 12:49:15] "POST /todo/api/v1.0/tasks/debug HTTP/1.1" 200 - 

したがって、json-Dataはフラスコに渡されないように思われますn。 私は基本的に同じテキストで試してみました。

curl-Callでコマンドラインから同じことを試してみると、うまくいきます。 カール・コマンド:フラスコ-Serverから

curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks/debug 

出力:

{'title': 'Read a book'} 
127.0.0.1 - - [12/Jul/2017 13:11:54] "POST /todo/api/v1.0/tasks/debug HTTP/1.1" 200 - 

任意のヘルプ?

+0

あなたは[ 'get_jsonを()'](使用してみてくださいでしたhttp://flask.pocoo.org /docs/0.12/api/#flask.Request.get_json)代わりに? – Bovarysme

+0

私は試みましたが、どちらの場合も「なし」です – Andre

答えて

0

コードを実行してWiresharkでHTTPリクエストを確認したところ、Content-Typeヘッダーがapplication/jsonに設定されていないことがわかりました。私はその後、curl ... --libcurl example.cによって製造されたものにあなたのコードを比較し、その要求ヘッダーがそうのように追加する必要が見つかりました

struct curl_slist *headers = NULL; 
headers = curl_slist_append(headers, "Accept: application/json"); 
headers = curl_slist_append(headers, "Content-Type: application/json"); 
headers = curl_slist_append(headers, "charsets: utf-8"); 
関連する問題