FastAPI Encabezados de solicitud y Cookies

FastAPI proporcionaHeaderyCookietipos, utilizados para obtener datos de los encabezados de solicitud HTTP y las cookies.


Parámetros de encabezado de solicitud

UsaHeaderDeclara parámetros de encabezado de solicitud:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    # Recibir el encabezado de solicitud User-Agent
    user_agent: Annotated[str | None, Header()] = None,
):
    return {"User-Agent": user_agent}

Visitahttp://127.0.0.1:8000/items/, el JSON devuelto contiene la información de User-Agent del navegador.


Conversión automática de encabezados de solicitud

Los nombres de los campos en los encabezados de solicitud HTTP usan guiones (por ejemplo,X-Token), pero los nombres de variables de Python no pueden contener guiones. FastAPI realiza la conversión automáticamente:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    # Los nombres de variables de Python usan guiones bajos; FastAPI los convierte automáticamente al encabezado de solicitud X-Token
    x_token: Annotated[list[str] | None, Header()] = None,
):
    return {"X-Token values": x_token}

Reglas de conversión:

Nombre de variable PythonEncabezado de solicitud HTTPDescripción
x_tokenX-TokenEl guion bajo se convierte automáticamente en guion
user_agentUser-AgentIgual que arriba
content_typeContent-TypeIgual que arriba

FastAPI convierte automáticamente el guion bajo de los nombres de variables_en guion-para que coincida con el encabezado de solicitud. Si necesitas deshabilitar esta conversión, configuraHeader(convert_underscores=False)。


Recibir encabezados de solicitud repetidos

Algunos encabezados de solicitud pueden aparecer varias veces (por ejemplo,Set-Cookie), usalistel tipo para recibir:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    # Recibir múltiples encabezados de solicitud X-Token
    x_token: Annotated[list[str] | None, Header()] = None,
):
    return {"X-Token values": x_token}

Ejemplo de solicitud:

GET /items/ HTTP/1.1
X-Token: foo
X-Token: bar

Respuesta:{"X-Token values": ["foo", "bar"]}


Parámetros de Cookie

UsaCookieDeclara parámetros de Cookie:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Cookie

app = FastAPI()


@app.get("/items/")
async def read_items(
    # Recibir la Cookie llamada session_token
    session_token: Annotated[str | None, Cookie()] = None,
):
    return {"session_token": session_token}

Usar encabezados de solicitud y Cookies juntos

Puedes obtener encabezados de solicitud y Cookies al mismo tiempo en la misma ruta:

Ejemplo

from typing import Annotated
from fastapi import FastAPI, Header, Cookie

app = FastAPI()


@app.get("/items/")
async def read_items(
    user_agent: Annotated[str | None, Header()] = None,
    session_token: Annotated[str | None, Cookie()] = None,
    ads_id: Annotated[str | None, Cookie()] = None,
):
    return {
        "User-Agent": user_agent,
        "Session-Token": session_token,
        "Ads-ID": ads_id,
    }


Resumen

  • UsaHeaderpara obtener parámetros de encabezado de solicitud HTTP
  • UsaCookiepara obtener parámetros de Cookie
  • FastAPI convierte automáticamente los guiones bajos en los nombres de variables de Python en guiones en los encabezados de solicitud
  • Usalist[str]para recibir encabezados de solicitud repetidos
  • Los parámetros de encabezado de solicitud y Cookie admiten las mismas reglas de validación que los parámetros de consulta
Otras extensiones