python
data_error
ai_generated
true
运行时错误:请求体已被消费
RuntimeError: The request body is already consumed
ID: python/starlette-request-stream-error
80%修复率
83%置信度
0证据数
2025-11-01首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.10 | active | — | — | — |
| 3.11 | active | — | — | — |
根因分析
Starlette 请求体流被多次读取或消费
English
Starlette 请求体流被多次读取或消费
解决方案
-
95% 成功率 一次性消费请求体并缓存
body = await request.body() # 后续使用 body 而非再次读取流
-
90% 成功率 使用中间件缓存请求体
@app.middleware('http') async def cache_body(request, call_next): if request.method in ['POST', 'PUT']: body = await request.body() request.state.body = body return await call_next(request)
无效尝试
常见但无效的做法:
-
重新读取已消费的流
90% 失败
流不可重置
-
复制请求体到内存
60% 失败
可能消耗大量内存