查看一個接口的 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 請求
瀏覽器訪問該接口