QPython 中文文档 下载 App

QPython 内置浏览器——HTTP 请求与网页预览

三种网络访问方式

在 QPython 中访问网络有三种途径:

方式场景说明
QPython 内置浏览器打开网页、预览 HTML轻量 WebView
Python 标准库 urllib基础 HTTP 请求零依赖
requests / httpx 库更强大的 HTTP 客户端需安装

QPython 内置浏览器

QSL4A 提供 droid.webViewShow() 可以拉起内置浏览器打开网页:

from androidhelper import Android
droid = Android()

# 打开一个网页
droid.webViewShow("https://www.python.org")

这个浏览器基于 Android WebView,不是完整的 Chrome——支持基础 HTML / CSS / JavaScript,但可能不支持某些现代前端特性。

用途

HTML 预览示例

如果你用 Python 生成了一段 HTML 并保存为文件:

html_content = """
<html>
<body>
<h1>Hello from QPython</h1>
<p>这是一段生成的 HTML</p>
</body>
</html>
"""

with open("report.html", "w") as f:
    f.write(html_content)

# 用内置浏览器预览
droid.webViewShow("file:///data/data/org.qpython.qpy/files/report.html")

Python 标准库 HTTP 请求

不依赖第三方库,用 Python 自带的 urllib:

import urllib.request
import urllib.parse

# GET 请求
response = urllib.request.urlopen("https://httpbin.org/get")
data = response.read().decode("utf-8")
print(data)

# POST 请求
data = urllib.parse.urlencode({"name": "test"}).encode()
req = urllib.request.Request("https://httpbin.org/post", data=data)
response = urllib.request.urlopen(req)
print(response.read())

urllib 功能齐全但写法繁琐。简单场景够用,但复杂的 API 调用(处理 headers、cookies、JSON 等)用 requests 更舒服。

requests 库

通过 QPYPI 安装 requests 包后:

import requests

# GET 请求(自动解码 JSON)
response = requests.get("https://api.github.com/repos/python/cpython")
print(response.json()["stargazers_count"])

# POST + JSON
response = requests.post(
    "https://api.example.com/data",
    json={"key": "value"},
    headers={"Authorization": "Bearer token"}
)
print(response.status_code, response.text)

# 带超时
response = requests.get("https://slow-api.example.com", timeout=5)

# 错误处理
try:
    response = requests.get("https://httpbin.org/status/404")
    response.raise_for_status()  # 状态码非 2xx 抛异常
except requests.RequestException as e:
    print(f"请求失败: {e}")

网络请求的注意事项

首次联网可能慢

QPython 的网络请求第一次执行时,Android 可能弹出权限请求或进行 DNS 解析。后续请求会快很多。

HTTPS 证书问题

极少数情况下,QPython 内置的 CA 证书过期可能导致 HTTPS 请求失败(报 SSL: CERTIFICATE_VERIFY_FAILED)。解决:

  import requests
  requests.packages.urllib3.disable_warnings()
  response = requests.get("https://self-signed.badssl.com/", verify=False)

网络超时设置

手机网络不稳定是常态,所有网络请求都应该设置超时:

response = requests.get(url, timeout=10)  # 10 秒超时

不设超时的话,请求可能无限挂起,脚本就卡着不动了。

后台网络请求

如果脚本在后台持续执行网络请求,需要:

小结

QPython 的网络访问能力有三层:内置浏览器看网页、urllib 做基础请求、requests 做复杂 API 调用。所有 HTTP 请求必须设超时——手机网络不稳定是最大的风险点。requests 库功能最强,建议装一个;urllib 零依赖,应急用也行。

进入硬件与自动化部分,这是 QPython 区别于 PC Python 的另一个核心价值区。