Заголовки запроса и cookie в FastAPI
FastAPI предоставляетHeaderиCookieТип, используемый для получения данных из заголовков HTTP-запроса и Cookie.
Параметр заголовка запроса
ИспользованиеHeaderОбъявление параметров заголовка запроса:
Пример
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
# Получение заголовка запроса User-Agent
user_agent: Annotated[str | None, Header()] = None,
):
return {"User-Agent": user_agent}
Посетитеhttp://127.0.0.1:8000/items/Возвращаемый JSON содержит информацию User-Agent браузера.
Автоматическое преобразование заголовков запроса
Имена полей в HTTP-заголовках запроса используют дефисы (например,X-Token), тогда как имена переменных Python не могут содержать дефисы. FastAPI автоматически выполняет преобразование:
Пример
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
# В именах переменных Python используются подчёркивания, FastAPI автоматически преобразует в заголовок запроса X-Token
x_token: Annotated[list[str] | None, Header()] = Отсутствует,
):
return {"X-Token values": x_token}
Правила преобразования:
| Имена переменных Python | Заголовки HTTP-запроса | Описание |
|---|---|---|
x_token | X-Token | Символы подчёркивания автоматически преобразуются в дефисы |
user_agent | User-Agent | То же, что выше |
content_type | Content-Type | То же, что выше |
FastAPI автоматически преобразует символы подчёркивания в именах переменных
_Преобразовать в дефисы-чтобы соответствовать заголовкам запроса. Если вам нужно отключить это преобразование, установитеHeader(convert_underscores=False)。
Получение дублирующихся заголовков запроса
Некоторые заголовки запроса могут появляться несколько раз (например,Set-Cookie), используйтеlistПринятие типов:
Пример
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
# Получение нескольких заголовков X-Token
x_token: Annotated[list[str] | None, Header()] = Отсутствует,
):
return {"X-Token values": x_token}
Пример запроса:
GET /items/ HTTP/1.1 X-Token: foo X-Token: bar
Ответ:{"X-Token values": ["foo", "bar"]}
Параметры Cookie
ИспользованиеCookieОбъявление параметров Cookie:
Пример
from fastapi import FastAPI, Cookie
app = FastAPI()
@app.get("/items/")
async def read_items(
# Получить cookie с именем session_token
session_token: Annotated[str | None, Cookie()] = None,
):
return {"session_token": session_token}
Совместное использование заголовков запроса и Cookies
Вы можете получить как заголовки запроса, так и Cookies в одном маршруте:
Пример
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,
}

Итог
- Использование
HeaderПолучение параметров заголовка HTTP-запроса - Использование
CookieПолучение параметров Cookie - FastAPI автоматически преобразует символы подчёркивания в именах переменных Python в дефисы в заголовках запроса
- Использование
list[str]Получение дублирующихся заголовков запроса - Параметры заголовков запроса и Cookie поддерживают те же правила валидации, что и query-параметры