FastAPI(18)- 详解 Header,获取请求头

简介: FastAPI(18)- 详解 Header,获取请求头

查看一个接口的 Header


进到某个网站,右键检查元素;或者直接 F12

找到 Network,选择一个请求,就能看到 Request Header、Response Header 啦

image.png

FastAPI 提供的 Header


  • Header 是 Path、Query、Cookie 的“姐妹”类
  • 它也继承自相同的通用 Param 类
  • 注意:从 fastapi 导入 Query、Path、Cookie、Header 等时,这些实际上是返回特殊类的函数

image.png


新增了一个参数,默认值是 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)


浏览器访问该接口

image.png


可以看到,获取的是 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 请求

 

浏览器访问该接口

image.png

相关文章
conda常用操作和配置镜像源
conda常用操作和配置镜像源
31354 0
【全是精华】Token的获取和使用-FastApi版
【全是精华】Token的获取和使用-FastApi版
1501 0
|
存储 Linux Docker
Docker 更新版本
Docker 更新版本原来版本 1.10 更新后的版本 19.03.1 更新 Docker 版本需要注意的问题: 注意系统是否支持新版本的储存驱动。 19.03.01 版本默认使用的储存驱动是 overlay2。
3196 0
简单练习Microsoft SQL Server MERGE同步两个表
【10月更文挑战第13天】本文介绍了在Microsoft SQL Server中使用`MERGE`语句同步两个表的步骤。首先创建源表`SourceTable`和目标表`TargetTable`并分别插入数据,然后通过`MERGE`语句根据ID匹配行,实现更新、插入和删除操作,最后验证同步结果。此方法可根据需求调整以适应不同场景。
482 1
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】大模型的到来
大模型的兴起,让系统工程师能在前所未有的集群规模上解决复杂工程问题,显著降低成本和时间。本文探讨了大模型的发展历程、技术架构、支持模态及应用领域,特别分析了AI系统与AI基础设施的区别及其对大模型的影响。随着大模型进入爆发期,AI系统的重要性日益凸显,不仅影响着算法的选择与发展,也成为推动大模型研究与应用的关键力量。
975 0
|
算法 决策智能
基于GA-PSO遗传粒子群混合优化算法的TSP问题求解matlab仿真
本文介绍了基于GA-PSO遗传粒子群混合优化算法解决旅行商问题(TSP)的方法。TSP旨在寻找访问一系列城市并返回起点的最短路径,属于NP难问题。文中详细阐述了遗传算法(GA)和粒子群优化算法(PSO)的基本原理及其在TSP中的应用,展示了如何通过编码、选择、交叉、变异及速度和位置更新等操作优化路径。算法在MATLAB2022a上实现,实验结果表明该方法能有效提高求解效率和解的质量。
|
消息中间件 并行计算 Java
Python中的并发编程
本文介绍了Python中的并发编程,并具体介绍了线程、进程、协程的基本用法和案例。
342 2
Python中的并发编程
|
监控 安全 数据安全/隐私保护
什么是OTA升级模式?
【7月更文挑战第20天】什么是OTA升级模式?
2147 8
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
|
SQL 自然语言处理 API
实战用Python解析出抽象语法树
抽象语法树分析可以动态的做网络安全的解析,例如,对SQL语句的解析,可以有效检测SQL是否存在问题
730 0
实战用Python解析出抽象语法树