如何在 Pyodide 上执行 HTTP POST 请求

2024-01-17

在 pyodide 中,它不支持 requests 模块,因此要从 api 获取数据,我们使用 open_url 以及如何使用 api 使用 pyodide 发布数据


更新:Pyodide v0.21.2

目前是不可能的 https://pyodide.org/en/stable/project/roadmap.html#write-http-client-in-terms-of-web-apis使用requests https://github.com/psf/requests因为 Pyodide 中不提供套接字。

不过,你可以使用JS获取API https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API直接形成Python代码。为此,您必须导入window对象来自js模块。这是一个现场演示:

(async () => { // enable await
  // init pyodide
  let pyodide = await loadPyodide();
  // import window object
  pyodide.runPython('from js import window')
  // fetch json
  let result = await pyodide.runPythonAsync("window.fetch('http://karay.me/truepyxel/test.json')")
  // result is now a response object
  console.log(result)
  // convert response to json
  let data = await result.json()
  console.log(data)
  alert(data.msg)
})() // call the function immediately
<script src="https://cdn.jsdelivr.net/pyodide/v0.21.2/full/pyodide.js"></script>

更多细节here https://karay.me/2022/07/12/bringing-python-to-the-web.html.


Pyodide v0.15.0

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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Pyodide 上执行 HTTP POST 请求 的相关文章

随机推荐