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")