Kivy UrlRequest

时间:2017-12-19 12:06:59

标签: python kivy

我的API工作正常,当我使用Postman测试时,我看到200状态。但是,我正在尝试使用Kivy应用程序访问它,但是在等待或退出应用程序后,我看到来自服务器的400响应。顺便说一下,当使用Postman进行测试时,我将标题指定为Content-Type: application/json,并在正文中我看到我的参数

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

作为raw数据发送。

我的代码

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 docs表示您不必指定方法,因为这会发送POST请求,所以我没有在此处指定

修改:服务器代码与我的问题无关,所以我删除了它

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

req_body是一个字符串参数,可能有点令人困惑,因为req_headers是一个字典。您可以使用:

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