You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中向HTTP2 POST请求流式上传数据?

Python实现HTTP2 POST流式上传方案

对应你在JavaScript中用process.stdin.pipe(request)的场景,Python的httpx库可以通过以下几种方式实现流式上传:

直接传入类文件对象(最接近JS pipe用法)

sys.stdin本身是类文件对象,httpx支持直接将其作为请求体传入,会自动逐块读取并流式发送,无需一次性加载全部内容到内存:

import sys
import httpx

with httpx.Client(http2=True) as client:
    resp = client.post("https://目标服务器地址/upload", content=sys.stdin)
    print(resp.status_code)

自定义生成器分块传输

如果需要对上传数据做自定义处理(比如加密、格式转换),可以用生成器来逐块输出数据,httpx会流式发送每个生成的块:

import sys
import httpx

def stream_processed_input():
    # 按4KB块读取标准输入,可根据需求调整块大小
    while chunk := sys.stdin.read(4096):
        # 这里可以添加数据处理逻辑,比如chunk = process(chunk)
        yield chunk

with httpx.Client(http2=True) as client:
    resp = client.post("https://目标服务器地址/upload", content=stream_processed_input())
    print(resp.status_code)

异步场景下的流式上传

如果你的代码是异步架构,使用AsyncClient同样支持流式上传:

import sys
import asyncio
import httpx

async def main():
    async with httpx.AsyncClient(http2=True) as client:
        resp = await client.post("https://目标服务器地址/upload", content=sys.stdin)
        print(resp.status_code)

asyncio.run(main())

注意事项

  • 确保目标服务器支持HTTP2协议,并且能够处理流式上传的POST请求
  • 类文件对象(如本地文件、sys.stdin)会被httpx自动识别为流式数据源,无需额外处理
  • 生成器方式适合需要自定义分块逻辑或数据预处理的场景

内容的提问来源于stack exchange,提问作者Tom Klino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:09:26