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.py 把 AsyncClient._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)
相关项目¶
- koenvo/pyodide-http:urllib3/requests 补丁。
- pyodide/pyodide:核心 WASM Python。
- hoodmane's httpx_patch.py:异步前身。
重要链接¶
- 仓库:https://github.com/CNSeniorious000/pyodide-httpx
- README(raw):https://raw.githubusercontent.com/CNSeniorious000/pyodide-httpx/main/README.md
- upstream patch:https://github.com/cloudflare/pyodide/blob/main/packages/httpx/httpx_patch.py
- 参考文章:https://blog.cloudflare.com/python-workers#async-client-libraries
解锁浏览器 Python HTTP!