Hola hoy os traigo un tutorial sobre cómo crear un interceptor o middleware en FastAPI para obtener las cabeceras X-REAL-IP
y X-Forwarded-For en las llamadas:
Introducción
En FastAPI, los interceptores (middlewares) son una herramienta poderosa que te permite personalizar el manejo de las solicitudes HTTP antes o después de que lleguen a los manejadores de rutas. En este tutorial, aprenderás a crear un interceptor que extraiga las cabeceras X-REAL-IP
y X-Forwarded-For de las llamadas HTTP entrantes en tu aplicación FastAPI.
Requisitos Previos:
- Python y FastAPI instalados en tu sistema.
- Conocimiento básico de FastAPI y Python.
Paso 1: Configura tu Entorno
Asegúrate de tener un entorno de Python configurado con FastAPI instalado. Puedes instalar FastAPI utilizando pip:
pip install fastapi
Paso 2: Crea un Interceptor
Crea una función que actuará como tu interceptor. Esta función tomará dos argumentos: request
y call_next
. La función call_next
representa la acción siguiente que se ejecutará después de que el interceptor realice su tarea.
from fastapi import Request async def real_ip_interceptor(request: Request, call_next): # Extrae la cabecera X-REAL-IP si está presente real_ip = request.headers.get('x-real-ip') # Extrae la cabecera FORWARD si está presente forward_header = request.headers.get('x-forwarded-for') # Asigna los valores a las variables si están presentes if real_ip: request.client.host = real_ip if forward_header: request.headers['x-forwarded-for'] = forward_header # Continúa con el siguiente paso en la cadena de manejo de solicitudes response = await call_next(request) return response
En este ejemplo, estamos extrayendo las cabeceras X-REAL-IP
y FORWARD
si están presentes en la solicitud y asignándolas a las variables real_ip
y x-forwarded-for. Luego, actualizamos la propiedad request.client.host
con el valor de X-REAL-IP
si existe y añadimos la cabecera x-forwarded-for con el valor de x-forwarded-for
si existe.
Paso 3: Implementa el Interceptor
Añade tu interceptor a la aplicación FastAPI utilizando el método add_middleware
:
from fastapi import FastAPI app = FastAPI() app.add_middleware(real_ip_interceptor)
Paso 4: Crea una Ruta de Ejemplo
Añade una ruta de ejemplo para probar el interceptor:
@app.get("/") async def read_root(request: Request): # Accede a la cabecera X-REAL-IP y FORWARD si se han asignado correctamente real_ip = request.client.host forward_header = request.headers.get('Forwarded') return {"X-REAL-IP": real_ip, "FORWARD": forward_header}
Paso 5: Ejecuta tu Aplicación
Ejecuta tu aplicación FastAPI:
uvicorn your_app_name:app --reload
Paso 6: Prueba tu Interceptor
Realiza una solicitud a tu aplicación FastAPI y verifica que las cabeceras X-REAL-IP
y FORWARD
se extraigan correctamente y se muestren en la respuesta.
Conclusión:
Has aprendido cómo crear un interceptor en FastAPI para obtener las cabeceras X-REAL-IP
y x-forwarded-for de las llamadas HTTP entrantes. Los interceptores te permiten personalizar el manejo de las solicitudes HTTP y realizar tareas adicionales antes o después de que una solicitud sea manejada por tu aplicación. Puedes adaptar este enfoque para trabajar con otras cabeceras o realizar otras tareas de personalización según tus necesidades específicas.
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.