FastAPI(18)- 詳解 Header,獲取請求頭
阿新 • • 發佈:2022-01-05
FastAPI(18)- 詳解 Header,獲取請求頭
檢視一個介面的 Header
進到某個網站,右鍵檢查元素;或者直接 F12
找到 Network,選擇一個請求,就能看到 Request Header、Response Header 啦
FastAPI 提供的 Header
- Header 是 Path、Query、Cookie 的“姐妹”類
- 它也繼承自相同的通用 Param 類
- 注意:從 fastapi 匯入 Query、Path、Cookie、Header 等時,這些實際上是返回特殊類的函式
新增了一個引數,預設值是 True,盲猜是跟轉換下換線有關係
獲取 Header 的栗子
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠蘿測試筆記
# blog: https://www.cnblogs.com/poloyy/
# time: 2021/9/21 2:39 下午
# file: 15_cookies.py
"""
from typing import Optional
import uvicorn
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(accept_encoding: Optional [str] = Header(None)):
return {"Accept-Encoding": accept_encoding}
if __name__ == "__main__":
uvicorn.run(app="16_Header:app", host="127.0.0.1", port=8080, reload=True, debug=True)
瀏覽器訪問該介面
可以看到,獲取的是 Request Header 裡面的值
提出疑問:函式引數命名為 accept_encoding 為什麼能識別到 Accept-Encoding?
- 首先,Accept-Encoding 這種變數名在 Python 是無效的
- 因此, Header 預設情況下,會用下劃線_代替-,這就是 convert_underscores 引數的作用
- 重點:HTTP Header 是不區分大小寫的,所以寫 accept_encoding 還是 Accept_Encoding 是一樣效果的
多個重名 Header
假設一個 Request Header 裡面有多個重名的 Header,那可以用 List[str] 來宣告引數型別
@app.get("/items/")
async def read_items(x_token: Optional[List[str]] = Header(None)):
return {"X-Token values": x_token}
假設 Request Header 有兩個重名的 Header
X-Token: foo
X-Token: bar
訪問 /items/ 介面得到的響應體會是
x_token 就是一個列表
{
"X-Token values": [
"bar",
"foo"
]
}
設定 Response Header
from starlette.responses import JSONResponse
@app.get("/header/")
def Login():
content = {
"name": "poloyy",
"age": 10
}
response = JSONResponse(content=content)
token = {
"x-token-name": "token",
"x-token-value": "test_header"
}
# 設定 Header
response.init_headers(token)
return response
這裡會用到 FastAPI 提供的響應模型,後面會詳解,這裡先做了解
方便演示,這裡用 get 請求