python
runtime_error
ai_generated
true
运行时错误:流已被消费
RuntimeError: Stream consumed
ID: python/starlette-request-body-consume-error
80%修复率
84%置信度
0证据数
2025-02-10首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.x | active | — | — | — |
根因分析
在 Starlette 中多次读取请求体,而请求体只能读取一次。
English
在 Starlette 中多次读取请求体,而请求体只能读取一次。
解决方案
-
95% 成功率
在第一次读取后缓存 body,如 request._body = await request.body()
-
90% 成功率
使用中间件一次性读取并将 body 存入 request.state
-
85% 成功率
使用 ASGI 的 receive 包装器缓存请求体
无效尝试
常见但无效的做法:
-
80% 失败
应用再次读取会报错。
-
90% 失败
第二次调用会引发 RuntimeError。
-
70% 失败
不符合 ASGI 规范。