推荐答案
在 FastAPI 中,可以通过 Header
函数从请求头中获取特定的头信息。以下是一个示例代码:
from fastapi import FastAPI, Header app = FastAPI() @app.get("/items/") async def read_items(user_agent: str = Header(None)): return {"User-Agent": user_agent}
在这个示例中,user_agent
参数通过 Header
函数从请求头中获取 User-Agent
的值。如果请求头中没有 User-Agent
,则 user_agent
的值为 None
。
本题详细解读
1. Header
函数的作用
Header
是 FastAPI 提供的一个依赖函数,用于从 HTTP 请求头中提取特定的头信息。它的使用方式与 Query
和 Path
类似,都是通过将参数声明为 Header
类型来提取请求头中的值。
2. 参数声明
在示例中,user_agent
参数被声明为 Header(None)
,这意味着:
Header
函数会尝试从请求头中提取User-Agent
的值。- 如果请求头中没有
User-Agent
,则user_agent
的值为None
。
3. 默认值和类型转换
Header
函数还支持默认值和类型转换。例如:
@app.get("/items/") async def read_items(user_agent: str = Header("Unknown")): return {"User-Agent": user_agent}
在这个例子中,如果请求头中没有 User-Agent
,user_agent
的值将默认为 "Unknown"
。
4. 自动转换
FastAPI 会自动将请求头中的值转换为 Python 类型。例如,如果请求头中的值是数字,可以将其声明为 int
类型:
@app.get("/items/") async def read_items(content_length: int = Header(0)): return {"Content-Length": content_length}
5. 自定义头名称
默认情况下,Header
函数会将参数名转换为小写并用连字符连接,作为请求头的名称。例如,user_agent
会被转换为 user-agent
。如果需要使用自定义的头名称,可以通过 alias
参数指定:
@app.get("/items/") async def read_items(custom_header: str = Header(None, alias="X-Custom-Header")): return {"Custom-Header": custom_header}
在这个例子中,custom_header
参数将从 X-Custom-Header
请求头中提取值。
6. 多个头信息
如果需要获取多个头信息,可以声明多个 Header
参数:
@app.get("/items/") async def read_items(user_agent: str = Header(None), content_length: int = Header(0)): return {"User-Agent": user_agent, "Content-Length": content_length}
7. 总结
通过 Header
函数,FastAPI 提供了一种简单而强大的方式来从 HTTP 请求头中提取信息。开发者可以轻松地获取、转换和处理请求头中的值,从而构建更加灵活和强大的 API。