【问题标题】:how can i manipulate my fastapi request headers to be mutable如何将我的 fastapi 请求标头操作为可变的
【发布时间】:2021-11-11 19:54:17
【问题描述】:

我正在尝试在我的 api 代码中更改我的请求标头。它现在是不可变的,与 fastapi starlette 一起使用。我该如何更改它以使我的请求标头是可变的?我想添加、删除和删除请求标头。我尝试实例化一个新请求并使用

直接修改请求
request.headers["authorization"] = "XXXXXX"

但我收到以下错误

TypeError: ‘Headers’ object does not support item assignment

谢谢。

【问题讨论】:

    标签: python-3.x fastapi


    【解决方案1】:

    我假设您想对中间件中的标头做一些事情。因为 FastAPI 是下面的 Starlette,所以 Starlette 有一个可以修改标头的数据结构。您可以使用原始标头值实例化 MutableHeaders,对其进行修改,然后将 request._headers 设置为新的可变标头。下面是一个例子:

    from starlette.datastructures import MutableHeaders
    from fastapi import Request    
    
    @router.get("/test")
    def test(request: Request):
         new_header = MutableHeaders(request._headers)
         new_header["xxxxx"]="XXXXX"
         request._headers = new_header
         print(request.headers)
         return {}
    

    现在您应该在 request.headers 对象的打印输出中看到“xxxxx”:

    MutableHeaders({'host': '127.0.0.1:8001', 'user-agent': 'insomnia/2021.5.3', 'content-type': 'application/json', 'authorization': '', 'accept': '*/*', 'content-length': '633', 'xxxxx': 'XXXXX'})
    

    【讨论】:

    • 可能会补充一点,这不会更新请求对象的范围属性。为此,必须调用更新成员函数request.scope.update(headers=request.headers.raw)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2015-02-19
    • 2021-08-21
    • 1970-01-01
    • 2022-11-24
    • 2016-07-14
    • 2019-04-23
    相关资源
    最近更新 更多