如何使用FastAPI从HTTP请求中获取cookies?

8

当有人访问API时,是否可以获取cookies?我需要读取每个请求的cookies。

@app.get("/")
async def root(text: str, sessionKey: str = Header(None)):
    print(sessionKey)
    return {"message": text+" returned"}

if __name__ == "__main__":
    uvicorn.run("main:app", host="0.0.0.0", port=5001 ,reload=True)
2个回答

7

选项 1

使用 Request 对象获取所需的 cookie,如 Starlette 文档 中所述。

from fastapi import Request

@app.get('/')
async def root(request: Request):
    return request.cookies.get('sessionKey')

选项二

使用 Cookie 参数,如 FastAPI 文档 中所述。顺便提一下,下面的示例将 cookie 参数定义为 可选的,使用类型 Union[str, None];然而,还有其他方法可以实现(例如,在 Python 3.10+ 中使用 str | None)- 请查看此答案此答案获取更多详细信息。

from fastapi import Cookie
from typing import Union

@app.get('/')
async def root(sessionKey: Union[str, None] = Cookie(None)):
    return sessionKey

请记住,在选项2中,变量名'sessionkey'必须与cookie键名相等。 - undefined

2

您可以使用与在示例中访问标头相同的方式来完成它(请参见文档):

from fastapi import Cookie

@app.get("/")
async def root(text: str, sessionKey: str = Header(None), cookie_param: int | None = Cookie(None)):
    print(cookie_param)
    return {"message": f"{text} returned"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接