【问题标题】:Kivy UrlRequestKivy UrlRequest
【发布时间】:2020-10-16 00:02:59
【问题描述】:

我的 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 文档说您不必指定方法,因为这会发送 POST 请求,所以我没有在这里指定

编辑:代码因为服务器与我的问题无关,所以我将其删除

【问题讨论】:

  • 如果您希望我们为您提供帮助,您必须提供minimal reproducible example,并且在您的情况下,我们需要您展示您是如何实现服务器的,否则您的问题就跑题了:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。 What topics can I ask about here?
  • @eyllanesc 感谢您的反馈。我想我的问题的标题很有误导性。我的问题只与 Kivy 的 UrlRequest 函数有关,以及我是否正确使用它,而不是关于我的服务器端代码的调试。我希望这是有道理的?
  • @eyllanesc 目前我的 Flask 服务器在收到请求时只会发出“Hello”消息
  • 我很清楚你的问题,但是作为一个你实现的自我,我们无法访问或测试可能会出现导致该错误的错误,我的想法是重现最准确的方式,我会忽略请求,如果您显示其他服务器发生相同的错误,您是否尝试过使用另一种类型的服务器,另一种类型的订单,例如 GET 等?。
  • 一个实现Hello World的Flask服务器文件不多,所以我想你可以展示一下你实现了什么。

标签: python kivy


【解决方案1】:

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)

【讨论】:

  • 谢谢@DipanshuJuneja。 :)
【解决方案2】:

req_body 是一个字符串参数,可能会因为 req_headers 是一个字典而有点混乱。您可以使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多