跳转至

pyodide-httpx

https://github.com/CNSeniorious000/pyodide-httpx

为 Pyodide 打补丁,让 httpx 在浏览器中工作。支持同步和异步 HTTP 请求。

Info

Pyodide 无 socket,httpx 卡住。用 pyfetch 桥接 JS fetch。

功能

  • 同步/异步 HTTP 请求
  • 流式响应支持
  • 零配置安装

实现

Monkey patch httpx 客户端,用 pyodide.http.pyfetch 替换底层。异步用 JS ReadableStream,同步用 run_sync。

我的巧思

  • 同步异步兼顾:run_sync 包装异步,无重复代码。
  • 零拷贝缓冲:acquire_buffer 上下文管理,GC 友好。
  • 可切换:flag 控制 sync/async。

深入洞见

pyodide-httpx 不是简单的例子补丁,而是对 httpx 栈进行的有意识改造:_async.pyAsyncClient._send_single_request 替换为调用 pyodide.http.pyfetch 并把响应包装为异步流;_sync.py 则通过 run_sync + syncify 把异步流变为同步迭代器供同步 API 使用。utils/sync.py 包含对 JS 同步能力的检测与 syncify 工具,说明库努力在不牺牲功能的情况下把两种风格做工整的桥接。仓库目前侧重实现,单元测试覆盖较少(未发现对应的完整测试套件)。

参考源码:

  • src/pyodide_httpx/_async.py(AsyncClient send -> pyfetch)
  • src/pyodide_httpx/_sync.py(Client sync wrapper via run_sync)

相关项目

重要链接

解锁浏览器 Python HTTP!