首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python/FastAPI:如何从后端API获取header或特定的header?

Python/FastAPI:如何从后端API获取header或特定的header?
EN

Stack Overflow用户
提问于 2021-07-03 06:47:05
回答 1查看 3.3K关注 0票数 1

我想用fastAPI从我的函数内的API中检索一个特定的头,但是我找不到解决方案。

在烧瓶中是很简单的:request.headers['your-header-name']

为什么见鬼的fastAPI要做这么简单的事情这么复杂?

有谁知道检索报头的解决方案?谢谢:)

装饰者:

代码语言:javascript
运行
复制
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‘头来检查是否存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-03 06:56:20

这很相似,你可以这样做

代码语言:javascript
运行
复制
from fastapi import FastAPI, Request


@app.get("/")
async def root(request: Request):
    my_header = request.headers.get('header-name')
    ...

注意:它是小写的

示例:

代码语言:javascript
运行
复制
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"}

更新:

如果你需要在装饰器中访问它,你可以使用下面的命令

代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68231936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档