优秀的编程知识分享平台

网站首页 > 技术文章 正文

PyScript—发出 HTTP 请求—最佳方法 | 教程

nanyue 2024-08-03 18:05:07 技术文章 10 ℃

一步一步的教程,向您介绍使用 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 函数的包装器。

感谢您阅读本文。

最近发表
标签列表