You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}")
)

关键说明

  1. 回调函数参数:on_success回调会接收两个参数,第一个是UrlRequest实例,第二个就是响应体字符串
  2. 异步逻辑:Kivy的UI线程不会被UrlRequest阻塞,请求在后台完成后自动触发回调
  3. 避免私有属性:不要依赖_queue这类带下划线的内部属性,Kivy版本更新可能会修改这些结构,导致代码失效
  4. 构建适配:UrlRequest是Kivy原生适配移动平台的工具,不会出现requests在GitHub Actions构建时的依赖缺失问题,适合你的跨平台构建需求

内容的提问来源于stack exchange,提问作者DevelopAndPop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:40:22