首页 > 解决方案 > 如何将我的 fastapi 请求标头操作为可变的

问题描述

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

request.headers["authorization"] = "XXXXXX"

但我收到以下错误

TypeError: ‘Headers’ object does not support item assignment

谢谢。

标签: python-3.xfastapi

解决方案


我假设您想对中间件中的标头做一些事情。因为 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'})

推荐阅读