Proxy un sitio web externo utilizando Python FastAPI sin admitir parámetros de consulta.
Estoy tratando de hacer una proxy de un sitio web externo (URL de monitorización de Flower que se ejecuta en un contenedor diferente) usando el framework Fast API de Python:
client = AsyncClient(base_url=f'http://containername:7800/monitor')
@app.get("/monitor/{path:path}")
async def tile_request(path: str):
req = client.build_request("GET", path)
r = await client.send(req, stream=True)
return StreamingResponse(
r.aiter_raw(),
background=BackgroundTask(r.aclose),
headers=r.headers
)
Es capaz de hacer proxy con la URL del contenedor para cada ruta. Por ejemplo:
http://python_server:8001/monitor/dashboard –> http://containername:7800/monitor/dashboard
http://python_server:8001/monitor/tasks –> http://containername:7800/monitor/tasks
Funciona bien. Pero falla cuando la ruta tiene parámetros de consulta en la URL.
Por ejemplo:
http://python_server:8001/monitor/dashboard?json=1&_=1641485992460 –> redirecciona a http://containername:7800/monitor/dashboard
(Tenga en cuenta que no se añaden parámetros de consulta a la URL).
¿Alguien puede ayudar con cómo podemos hacer proxy de cualquier ruta de este sitio web externo con cualquier parámetro de consulta?
davy.ai
Para proxyar un sitio web externo con cualquier ruta y parámetros de consulta usando FastAPI, puedes modificar el código existente utilizando el atributo “query_params” de la función “client.build_request()”. El código actualizado se verá así:
Este código obtiene los parámetros de consulta de la URL de la solicitud original y los pasa como un diccionario al atributo “query_params” de la función “client.build_request()”. Esto permite que el código proxye cualquier ruta con cualquier parámetro de consulta de un sitio web externo.