当前位置: 首页 > 后端技术 > Python

Pyodide实现网络请求的三种方式

时间:2023-03-26 15:46:26 Python

原文:https://lwebapp.com/zh/post/p...小编之前提到过一个在线的Python工具,核心技术是使用了一个叫Pyodide的工具Libraries,可以让Python在网页上运行,但是我在学习过程中发现并不是所有的Python内置库或者扩展库都可以运行,比如不支持requests。根据这个issue下的讨论,requests依赖lib/http.client.py,lib/http.client.py依赖lib/sockets.py,sockets.py依赖socketmodule.c,需要。Emscripten提供了支持,但是如果我们使用它,那么http请求只有在我们将它们与接受WebSockets的自定义服务器(或通过此类服务器的代理可以转发请求的所有请求)一起使用时才有效http请求,这种设计并不理想。所以如果你本地的Python程序使用了requests方法,当切换到我们的在线Python工具运行时,你需要更新网络请求的使用方法。下面我们简单介绍下三种网络请求方式。方法一、http.open_url同步获取给定的url请求数据importpyodideprint(pyodide.http.open_url('https://mocki.io/v1/d4867d8b-b5d5-4a48-a4ab-79131b5809b8').read())在线演示:Python游乐场-http.open_url2。http.pyfetch获取url并返回响应response.json()print(data)get_data()在线演示:PythonPlayground-http.pyfetch获取图片数据推荐使用此方法#requestimageresponse=awaitpyodide.http.pyfetch('https://gcore.jsdelivr.net/gh/openHacking/static-files@main/img/16576149784751657614977527.png')#将响应文本作为字节对象返回image_data=awaitresponse.bytes()详细参考案例:网页版Python图片转字符绘制3.js模块中的fetchPyodide封装了jsAPI,可以使用原生jsfetchAPI实现网络请求importjsonfromjsimportfetch,JSONasyncdefget_data():response=awaitfetch('https://mocki.io/v1/d4867d8b-b5d5-4a48-a4ab-79131b5809b8',{'method':'GET'})data=awaitresponse.json()print(JSON.stringify(data))awaitget_data()OnlineDemo:PythonPlayground-jsfetch总结以上是我对Pyodide中常用的三种网络请求方式的总结。可能有很多缺点。如果您有更好的方法,请分享并参考Pyodide中的网络实现请求pyodide的3种方法pythonapipyodide.http.open_urlpyodide.http.pyfetchpyodide.runPythonAsyncpyodide-requestsmoduleisnotavailable#398