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

Pra*_*K M 9 python cookies http starlette fastapi

当有人点击 API 时是否可以获取 cookie?我需要读取每个请求的cookie。

@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)
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 8

选项1

\n

使用该Request对象获取您想要的 cookie,如Starlette 文档中所述中所述。

\n
from fastapi import Request\n\n@app.get(\'/\')\nasync def root(request: Request):\n    return request.cookies.get(\'sessionKey\')\n
Run Code Online (Sandbox Code Playgroud)\n

选项2

\n

使用该参数,如FastAPI 文档Cookie中所述。附带说明一下,下面的示例使用类型将 cookie 参数定义为可选;但是,还有其他方法可以做到这一点(例如,在Python 3.10+中)\xe2\x80\x94查看此答案此答案以获取更多详细信息。Union[str, None]str | None

\n
from fastapi import Cookie\nfrom typing import Union\n\n@app.get(\'/\')\nasync def root(sessionKey: Union[str, None] = Cookie(None)):\n    return sessionKey\n
Run Code Online (Sandbox Code Playgroud)\n


M.O*_*.O. 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"}
Run Code Online (Sandbox Code Playgroud)