Cómo crear un interceptor o middleware para obtener X-REAL-IP y X-Forwarded-For en las llamadas con FAST-API

Tiempo de lectura: 2 minutos

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:

  1. Python y FastAPI instalados en tu sistema.
  2. 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.

Deja un comentario