Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install fastapi
pip install fastapi
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from fastapi import FastAPI
app = FastAPI()
app.add_middleware(real_ip_interceptor)
from fastapi import FastAPI app = FastAPI() app.add_middleware(real_ip_interceptor)
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
@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}
@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}
@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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
uvicorn your_app_name:app --reload
uvicorn your_app_name:app --reload
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.

2

Deja un comentario