File size: 1,391 Bytes
7d5e051 316ec54 |
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from fastapi import FastAPI, Query, Request, Response
import httpx
import uvicorn
app = FastAPI()
@app.api_route("/", methods=["GET", "POST", "PUT", "DELETE"])
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE"])
async def proxy(request: Request, url: str = Query(...)):
async with httpx.AsyncClient() as client:
method = request.method
headers = dict(request.headers)
headers.pop("host", None)
content = await request.body()
try:
target_response = await client.request(
method,
url,
headers=headers,
content=content,
follow_redirects=True
)
except Exception as e:
return Response(content=str(e), status_code=500)
excluded_headers = [
"content-encoding",
"content-length",
"transfer-encoding",
"connection"
]
response_headers = {
k: v for k, v in target_response.headers.items()
if k.lower() not in excluded_headers
}
return Response(
content=target_response.content,
status_code=target_response.status_code,
headers=response_headers,
media_type=target_response.headers.get("content-type")
)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860) |