zoukankan      html  css  js  c++  java
  • 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 请求

    浏览器访问该接口

  • 相关阅读:
    Latin1的所有字符编码
    Qt自定义委托在QTableView中绘制控件、图片、文字(内容比较全)
    Delphi5 update1的序列号
    Access Violation at address 00000000.Read of address 00000000 解决办法
    RealThinClient学习(一)
    使用WebDriver遇到的那些坑
    谱聚类(Spectral Clustering)详解
    Asp.net Mvc4默认权限详细(上)
    ASP.NET Web API中的JSON和XML序列化
    [珠玑之椟]估算的应用与Little定律
  • 原文地址:https://www.cnblogs.com/poloyy/p/15316932.html
Copyright © 2011-2022 走看看