2017-12-19 23 views
0

私のAPIは正常に動作し、Postmanを使用してテストすると200のステータスが表示されます。しかし、私はKivyアプリケーションを使用してアクセスしようとしていますが、アプリを待ったり終了したりすると、サーバからの応答が400になっています。ポストマンでテストちなみに私はContent-Type: application/jsonとしてヘッダーを指定し、ボディに私は私のパラメータrawデータとして送信されてKivy UrlRequest

{ 
    "search_text": "Hello", 
    "num_results": 1 
} 

を参照してください。:

私のコード

def search(self, search_text): 
     header = {'Content-Type':'application/json'} 
     req = UrlRequest('http://127.0.0.1:5000/search',req_body={"search_text": search_text,"num_results": 1},on_success=Test.got_json,req_headers=header) 
     print("Search method called") 


@staticmethod 
def got_json(req,result): 
     print(result) 

Kivyのドキュメントは、あなたがそう私はここに

編集]を指定していませんでした、これはPOSTリクエストを送信したような方法を指定する必要はありませんと言いますサーバーのコードは私の問題では無関係ですので、削除しました

+0

をあなたは私たちがあなたを助けたい、とあなたのケースでは、我々はあなたがサーバーを実装しているかを示すために必要がある場合は、[MCVE]を提供しなければならない、そうでない場合は、あなたの質問がオフトピックに落ちます:**デバッグのヘルプを求める質問(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体にそれを再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者には役に立ちません** [ここで私はどのような話題を聞くことができますか?](https://stackoverflow.com/help/on-topic) – eyllanesc

+0

@eyllanescフィードバックいただきありがとうございます。私は私の質問のタイトルがかなり誤解を招いていたと思います。私の質問はむしろKivyの 'UrlRequest'関数にのみ関係していました。もし私が正しく使用していて、私のサーバーサイドコードのデバッグに関係しないのであれば。私はそれが理にかなってほしいのですか –

+0

@eyllanesc私のFlaskサーバーは、リクエストを受け取ったときに「Hello」メッセージを吐き出す以外に何もしません。 –

答えて

2

UrlRequestは、要求本体としてstrオブジェクトを渡す必要があります。リクエスト辞書をダンプすることで、文字列オブジェクトとしてシリアル化できます。このダンプされた辞書をリクエスト本体としてUrlRequestに渡します。

import json 

req_body=json.dumps({'search_text': search_text, 'num_results': 1}) 
req = UrlRequest(
     'http://127.0.0.1:5000/search', 
     req_body=req_body, 
     on_success=Test.got_json, 
     req_headers=header) 
+0

ありがとうございました。それは動作します –

+0

ありがとう@DipanshuJuneja。 :) –

1

req_bodyは文字列パラメータです.req_headersはdictであるため、少し混乱するかもしれません。あなたは使用することができます。

req_body=json.dumps({"search_text": search_text,"num_results": 1}) 
+1

ありがとうございました。できます –