Kivy 2.1.0中如何获取URL请求的响应体内容?
Kivy 2.1.0中UrlRequest获取响应体的正确实现(替代requests)
问题核心
你遇到的问题本质是UrlRequest是异步请求组件,和requests的同步请求逻辑完全不同:
- requests的
get方法会阻塞直到请求完成,所以能直接拿到响应文本 - UrlRequest创建后立即返回,此时请求还在后台执行,直接访问
body.text自然拿不到内容;你调试看到的_queue内部属性是Kivy暂存响应的私有结构,不能作为稳定的访问方式。
正确代码实现
必须通过回调函数处理请求完成后的响应,这是Kivy UrlRequest的标准用法。以下是适配你需求的代码:
from kivy.network.urlrequest import UrlRequest def on_request_success(req, response_body): # response_body就是目标URL返回的字符串 print(response_body) # 判断WiFi状态 if "STATE=ON" in response_body: # 这里写WiFi开启后的逻辑 print("WiFi状态:开启") elif "STATE=OFF" in response_body: # 这里写WiFi关闭后的逻辑 print("WiFi状态:关闭") # 发起请求,指定请求成功时的回调函数 UrlRequest( url='URLofYourChoise', on_success=on_request_success, # 可选:添加请求失败的回调 on_failure=lambda req, err: print(f"请求失败:{err}") )
关键说明
- 回调函数参数:
on_success回调会接收两个参数,第一个是UrlRequest实例,第二个就是响应体字符串 - 异步逻辑:Kivy的UI线程不会被UrlRequest阻塞,请求在后台完成后自动触发回调
- 避免私有属性:不要依赖
_queue这类带下划线的内部属性,Kivy版本更新可能会修改这些结构,导致代码失效 - 构建适配:UrlRequest是Kivy原生适配移动平台的工具,不会出现requests在GitHub Actions构建时的依赖缺失问题,适合你的跨平台构建需求
内容的提问来源于stack exchange,提问作者DevelopAndPop
相关产品推荐
相关产品推荐

