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)