使用 Uvicorn/FastAPI 发出下游 HTTP 请求
问题:
发送多个并发时向 Uvicorn/FastAPI 上托管的 API 端点发出请求,错误为遇到:
h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
解决方案:
要解决此问题并在 FastAPI 中有效处理下游 HTTP 请求,请考虑使用 httpx 而不是传统请求库。
为什么使用httpx?
示例用法:
以下代码演示了在 FastAPI 中使用 httpx端点:
from fastapi import FastAPI, StreamingResponse from httpx import AsyncClient app = FastAPI() @app.on_event("startup") async def startup_event(): app.state.client = AsyncClient() @app.on_event("shutdown") async def shutdown_event(): await app.state.client.aclose() @app.get("/") async def home(): client = app.state.client req = client.build_request("GET", "https://www.example.com/") r = await client.send(req, stream=True) return StreamingResponse(r.aiter_raw())
其他提示:
通过采用 httpx 并实施建议的最佳实践,您可以在 Uvicorn/FastAPI 应用程序中有效处理下游 HTTP 请求。
以上是在 FastAPI 中并发下行 HTTP 请求时,httpx 如何解决'h11._util.LocalProtocolError”?的详细内容。更多信息请关注PHP中文网其他相关文章!