一步一步的教程,向您介绍使用 PyScript 的 HTTP 请求
在 PyScript 中发出请求是一个热门话题,因为 python 的流行模块请求它在 Pyodide 中不受支持。 幸运的是,还有其他方法可以在 PyScript 中发出 HTTP 请求。
方法 #1 — 使用 Pyodide 的 pyfetch(最佳方法)
由于 PyScript 建立在 pyodide 之上,因此您可以使用任何来自 pyodide 的 API。
但是..什么是真正的pyfetch?
根据 pyodide 的文档,pyfetch 是 JavaScript fetch 的包装器。
Pyodide 提供了 pyodide.http.pyfetch ,它是一个方便的 JavaScript fetch 包装器。
与 python 不支持的模块请求相比,fetch 的一个好处是 fetch 是异步的。
主要问题是请求是同步的,而 fetch 是异步的。 可以使用 XMLHttpRequest 进行同步调用,但是它不能支持很多选项并且效率不高。
我们来看看pyodide.http.pyfetch的定义
async http.pyfetch(url: str, **kwargs) → pyodide.http.FetchResponse
文档指出 **kwargs 可以是用于 Javascript 的 Fetch API 的任何可选参数。
这些参数中包括正文、标题、方法
from pyodide.http import pyfetch
import asyncioresponse = await pyfetch(url="https://jsonplaceholder.typicode.com/todos/1", method="GET")output = f"GET request=> status:{response.status}, json:{await response.json()}"
这里最重要的是你必须导入 asyncio 包,否则你会得到奇怪的错误。 这个无证的细节困扰了我好几个小时。 幸运的是,我找到了一篇对我有帮助的好文章。 希望当您阅读本文时,这已经解决了。
使用 pyfetch 的 HTTP GET 请求的完整示例:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
<style>
h1 {
font-size: 20px;
color: green;
text-transform: uppercase;
text-align: center;
margin: 0 0 35px 0;
text-shadow: 0px 1px 0px #f2f2f2;
}
</style>
</head>
<body style='font-size: 20px;'>
<h1>PyScript - HTTP Requests pyfetch</h1>
<div id="request_output"></div>
<py-script>
from pyodide.http import pyfetch
import asyncio
response = await pyfetch(url="https://jsonplaceholder.typicode.com/todos/1", method="GET")
output = f"GET request=> status:{response.status}, json:{await response.json()}"
pyscript.write('request_output', output)
</py-script>
</body>
</html>
方法 #2 — XMLHttpRequest 和其他 JS 函数
在 PyScript 中发出 HTTP 请求的第二种方法是使用其他 JavaScript 函数。 您可以使用 JS 模块在 PyScript 中调用任何 javascript 函数/对象。
from js import XMLHttpRequest
req = XMLHttpRequest.new()
req.open("GET", "https://jsonplaceholder.typicode.com/todos/1", False)
req.send(None)
output = str(req.response)
请记住,如果您以这种方式使用 XMLHttpRequest,您需要发出一个具有一些实际原始输出/json 的 Web 请求。 如果不是,它会弹出一个 CORS 错误,如果你愿意,你可以在浏览器中禁用它。
使用 XMLHttpRequest 的 HTTP GET 请求的完整示例:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
<style>
h1 {
font-size: 20px;
color: green;
text-transform: uppercase;
text-align: center;
margin: 0 0 35px 0;
text-shadow: 0px 1px 0px #f2f2f2;
}
</style>
</head>
<body style='font-size: 20px;'>
<h1>PyScript - HTTP Requests XMLHttpRequest</h1>
<div id="request_output"></div>
<py-script>
from js import XMLHttpRequest
req = XMLHttpRequest.new()
req.open("GET", "https://jsonplaceholder.typicode.com/todos/1", False)
req.send(None)
output = str(req.response)
pyscript.write('request_output', output)
</py-script>
</body>
</html>
结论
总之,PyScript PyScript 中的请求并不难掌握。 它们只是现有 JavaScript 函数的包装器。
感谢您阅读本文。