File size: 876 Bytes
f14963b dcda4aa f14963b dcda4aa f14963b dcda4aa f14963b 87b4a88 f14963b 87b4a88 39af2fb ecdcde8 f14963b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
from contextlib import asynccontextmanager
from typing import AsyncIterator
from fastapi import FastAPI
from fastapi_proxy_lib.core.http import ForwardHttpProxy
from fastapi_proxy_lib.core.tool import default_proxy_filter
from httpx import AsyncClient
from starlette.requests import Request
proxy = ForwardHttpProxy(AsyncClient(), proxy_filter=default_proxy_filter)
@asynccontextmanager
async def close_proxy_event(_: FastAPI) -> AsyncIterator[None]:
"""Close proxy."""
yield
await proxy.aclose()
app = FastAPI(lifespan=close_proxy_event)
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT"])
async def _(request: Request, path: str = ""):
return await proxy.proxy(request=request, path=path)
if __name__ == '__main__':
import uvicorn
uvicorn.run("run:app", host="0.0.0.0", port="8080")
|