【发布时间】:2021-02-23 14:04:53
【问题描述】:
在pyodide中,它不支持requests模块,因此我们使用open_url从api中获取数据,我们如何使用api使用pyodide发布数据
【问题讨论】:
在pyodide中,它不支持requests模块,因此我们使用open_url从api中获取数据,我们如何使用api使用pyodide发布数据
【问题讨论】:
pyodide 目前不支持 requests 模块,因为它依赖于 WebAssembly 浏览器 VM 中未实现的套接字。
但是,您可以使用 pyodide 中的 Web API 进行 POST 调用。下面是一个使用XMLHttpRequest的例子
from js import XMLHttpRequest, Blob
import json
data = {"a": 1}
req = XMLHttpRequest.new()
req.open("POST", "https://httpbin.org/anything", False)
blob = Blob.new([json.dumps(data)], {type : 'application/json'})
req.send(blob)
str(req.response)
未来可能会修补一些经典的 HTTP 客户端模块以使用 pyodide 中的 Web API(参见 pyodide#140)。
【讨论】:
您也可以使用 JS Fetch API 直接形成 Python 代码。为此,您首先必须从 js 模块导入 window 对象。这是一个现场演示:
let python_code = `
from js import window
def fetch():
window.fetch('http://karay.me/truepyxel/test.json').then(lambda resp: resp.json()).then(lambda jsoh: show_result(jsoh))
def show_result(data):
div = window.document.createElement('div')
#insert into body as a first child
window.document.body.prepend(div)
div.innerHTML=window.JSON.stringify(data)
`
// init environment
languagePluginLoader
// then run Python code
.then(() => pyodide.runPythonAsync(python_code));
<!DOCTYPE html>
<html>
<head>
<script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
<button onclick='pyodide.globals.fetch()'>Fetch</button>
</body>
</html>
【讨论】: