我想用fastAPI从我的函数内的API中检索一个特定的头,但是我找不到解决方案。
在烧瓶中是很简单的:request.headers['your-header-name']
为什么见鬼的fastAPI要做这么简单的事情这么复杂?
有谁知道检索报头的解决方案?谢谢:)
装饰者:
def token_required(f):
@wraps(f)
def decorator(*args, **kwargs):
CONFIG = settings.read_config()
token = None
headers = Request.headers
if "Authorization" in headers:
auth_header = Request.headers
token = auth_header
elif not token:
return {"Error": "Token is missing or incorrect header name"}, 401
try:
public_key = CONFIG["APPLICATION"]["PUBLIC_KEY"]
claim = jwt.decode(token, public_key)
claim.validate()
except UnicodeDecodeError as err:
return {"Error": f"An error occurred -> {err} check your token"}, 401
return f(*args, **kwargs)
return decorator
我需要读取'Authorization‘头来检查是否存在。
发布于 2021-07-03 06:56:20
这很相似,你可以这样做
from fastapi import FastAPI, Request
@app.get("/")
async def root(request: Request):
my_header = request.headers.get('header-name')
...
注意:它是小写的
示例:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/")
async def root(request: Request):
my_header = request.headers.get('my-header')
return {"message": my_header}
现在,如果您在本地主机上使用uvicorn运行此应用程序,您可以尝试发送curl
curl -H "My-Header: test" -X GET http://localhost:8000
这将导致
{"message":"test"}
更新:
如果你需要在装饰器中访问它,你可以使用下面的命令
def token_required(func):
@wraps(func)
async def wrapper(*args, request: Request, **kwargs):
my_header = request.headers.get('my-header')
# my_header will be now available in decorator
return await func(*args, request, **kwargs)
return wrapper
https://stackoverflow.com/questions/68231936
复制相似问题