UrlRequest

在 1.0.8 版本加入.

您可以使用 UrlRequest 在网络上发起异步请求,并在请求完成时获取结果。其设计理念与 JavaScript 中的 XHR 对象相同。

如果 Content-Type 为 application/json,内容也会被解码,并且结果会自动通过 json.loads 处理。

创建请求的语法如下:

from kivy.network.urlrequest import UrlRequest
req = UrlRequest(url, on_success, on_redirect, on_failure, on_error,
                 on_progress, req_body, req_headers, chunk_size,
                 timeout, method, decode, debug, file_path, ca_file,
                 verify)

只有第一个参数是必需的:其余参数都是可选的。默认情况下,会发送一个“GET”请求。如果 UrlRequest.req_body 不为 None,则会发送一个“POST”请求。您需要根据自身需求调整 UrlRequest.req_headers,而请求的响应将作为 on_success 事件回调函数中名为“result”的参数进行访问。

获取JSON的示例:

def got_json(req, result):
    for key, value in req.resp_headers.items():
        print('{}: {}'.format(key, value))

req = UrlRequest('https://httpbin.org/headers', got_json)

发布数据的示例(改编自httplib示例):

import urllib

def bug_posted(req, result):
    print('Our bug is posted!')
    print(result)

params = urllib.urlencode({'@number': 12524, '@type': 'issue',
    '@action': 'show'})
headers = {'Content-type': 'application/x-www-form-urlencoded',
          'Accept': 'text/plain'}
req = UrlRequest('bugs.python.org', on_success=bug_posted, req_body=params,
        req_headers=headers)

如果你想要同步请求,可以调用 wait() 方法。

kivy.network.urlrequest.UrlRequest

UrlRequestUrllib 的别名

class kivy.network.urlrequest.UrlRequestBase(url, on_success=None, on_redirect=None, on_failure=None, on_error=None, on_progress=None, req_body=None, req_headers=None, chunk_size=8192, timeout=None, method=None, decode=True, debug=False, file_path=None, ca_file=None, verify=True, proxy_host=None, proxy_port=None, proxy_headers=None, user_agent=None, on_cancel=None, on_finish=None, cookies=None, auth=None)[源代码]

基类:Thread

一个UrlRequest。使用方法请参阅模块文档。

在 1.5.1 版本发生变更: 添加 debug 参数

在 1.0.10 版本发生变更: 添加 method 参数

在 1.8.0 版本发生变更: 新增参数 decode。新增参数 file_path。新增参数 on_redirect。新增参数 on_failure

在 1.9.1 版本发生变更: 新增参数 ca_file。新增参数 verify

在 1.10.0 版本发生变更: 新增了参数 proxy_hostproxy_portproxy_headers

在 1.11.0 版本发生变更: 新增参数 on_cancel

在 2.2.0 版本发生变更: 新增参数 on_finish。新增参数 auth

参数:
url:字符串

完整的URL字符串用于调用。

on_success:回调函数(request, result)

获取结果后要调用的回调函数。

on_redirect: 回调函数(request, result)

服务器返回重定向时要调用的回调函数。

on_failure:回调函数(request, result)

服务器返回客户端或服务器错误时调用的回调函数。

on_error:回调函数(request, error)

发生错误时要调用的回调函数。

on_progress:回调函数(request, current_size, total_size)

用于报告下载进度的回调函数。如果HTTP响应中未报告Content-Length,`total_size`可能为-1。每次读取完`chunk_size`后,将调用此回调函数。

on_cancel: 回调函数(request)

用户通过.cancel()方法请求取消下载操作时调用的回调函数。

on_finish: 回调函数(request)

请求完成时调用的附加回调函数。

req_body:字符串,默认为 None

请求中发送的数据。如果该数据不为None,则将执行POST请求而非GET请求。

req_headers:字典,默认为 None

要添加到请求中的自定义标头。

chunk_size:整数,默认值为8192

每次读取的块大小,仅在设置了`on_progress`回调时使用。如果将其设置得过小,会触发大量`on_progress`回调,从而降低下载速度。若希望获得最大下载速度,请增大`chunk_size`或不要使用``on_progress``。

timeout:整数,默认为 None

如果设置,阻塞操作将在这么多秒后超时。

method:字符串,默认为 'GET'`(如果指定了 ``body` 则为 'POST'

要使用的HTTP方法。

decode:布尔值,默认为 True

如果为 False,则跳过对响应的解码。

debug:布尔值,默认为 False

如果为True,将使用Logger.debug打印关于URL访问/进度/错误的信息。

file_path:str,默认为 None

如果设置了该属性,UrlRequest 的结果将写入此路径,而不是保存在内存中。

ca_file:字符串,默认为 None

指定用于验证HTTPS证书的SSL CA证书文件路径

verify:布尔值,默认为 True

如果为 False,则禁用 SSL CA 证书验证。

proxy_host:字符串,默认为 None

如果设置,则指定此连接使用的代理主机。

proxy_port:整数,默认为 None

如果设置了此项,并且同时设置了 proxy_host,则使用此端口连接到代理服务器。

proxy_headers:字典,默认为 None

如果设置了该属性,并且同时设置了 proxy_host,则这些头部信息将用于发送到代理服务器的 CONNECT 请求中。

auth:HTTPBasicAuth,默认为 None

如果设置,请求将使用基本认证(basicauth)进行身份验证。仅在“Requests”实现中使用。

cancel()[源代码]

取消当前请求。该请求将被中止,且结果不会被分发。一旦取消,将调用 on_cancel 回调。

在 1.11.0 版本加入.

property chunk_size

返回数据块的大小,仅在“进度”模式下使用(当设置了on_progress回调时)。

decode_result(result, resp)[源代码]

根据从URL获取的结果的Content-Type进行解码。目前仅支持application/json。

property error

返回请求的错误信息。此值在请求完成之前不会被确定。

property is_finished

如果请求已完成,无论成功还是失败,都返回True。

req_body

__init__ 中传递的请求体

req_headers

__init__ 中传递的请求头

property resp_headers

如果请求已完成,则返回包含响应头的字典。否则,将返回None。

property resp_status

如果请求已完成,则返回响应的状态码,否则返回None。

property result

返回请求的结果。此值在请求完成前不会被确定。

run()[源代码]

表示线程活动的方法。

你可以在子类中重写此方法。标准的run()方法会调用传递给对象构造函数的可调用对象(作为target参数),如果存在的话,并使用从args和kwargs参数中分别获取的顺序参数和关键字参数。

url

请求的URL

wait(delay=0.5)[源代码]

等待请求完成(直到 resp_status 不为 None)

备注

此方法旨在主线程中使用,回调将从您调用的同一线程中分发。

在 1.1.0 版本加入.

class kivy.network.urlrequest.UrlRequestRequests(url, on_success=None, on_redirect=None, on_failure=None, on_error=None, on_progress=None, req_body=None, req_headers=None, chunk_size=8192, timeout=None, method=None, decode=True, debug=False, file_path=None, ca_file=None, verify=True, proxy_host=None, proxy_port=None, proxy_headers=None, user_agent=None, on_cancel=None, on_finish=None, cookies=None, auth=None)[源代码]

基类:UrlRequestBase

class kivy.network.urlrequest.UrlRequestUrllib(url, on_success=None, on_redirect=None, on_failure=None, on_error=None, on_progress=None, req_body=None, req_headers=None, chunk_size=8192, timeout=None, method=None, decode=True, debug=False, file_path=None, ca_file=None, verify=True, proxy_host=None, proxy_port=None, proxy_headers=None, user_agent=None, on_cancel=None, on_finish=None, cookies=None, auth=None)[源代码]

基类:UrlRequestBase