首页 > 其他分享 >Cookie和Header

Cookie和Header

时间:2024-09-26 14:14:36浏览次数:1  
标签:None Union items accept Header Cookie Accept

1.Cookie

from typing import Union

from fastapi import Cookie, FastAPI

app = FastAPI()


@app.get("/items/")
async def read_items(ads_id: Union[str, None] = Cookie(default=None)):
    return {"ads_id": ads_id}
http://127.0.0.1:8000/items/

{"ads_id":"cccc"}

2.Header

为了声明headers, 你需要使用Header, 因为否则参数将被解释为查询参数。

2-1.自动转换下划线

HeaderPath, QueryCookie 提供的功能之上有一点额外的功能。

大多数标准的headers用 "连字符" 分隔,也称为 "减号" (-)。

但是像 user-agent 这样的变量在Python中是无效的。

因此, 默认情况下, Header 将把参数名称的字符从下划线 (_) 转换为连字符 (-) 来提取并记录 headers.

同时,HTTP headers 是大小写不敏感的,因此,因此可以使用标准Python样式(也称为 "snake_case")声明它们。

因此,您可以像通常在Python代码中那样使用 user_agent ,而不需要将首字母大写为 User_Agent 或类似的东西。

如果出于某些原因,你需要禁用下划线到连字符的自动转换,设置Header的参数 convert_underscoresFalse:

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    user_agent: Union[str, None] = Header(default=None),
    accept : Union[str, None] = Header(default=None),
    accept_encoding: Union[str, None] = Header(default=None),
    accept_language: Union[str, None] = Header(default=None)
):
    return {"User-Agent": user_agent, "Accept": accept, "Accept-Encoding": accept_encoding, "Accept-Language": accept_language}
http://127.0.0.1:8000/items/

{
    "User-Agent": "PostmanRuntime/7.32.3",
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9,zh-TW;q=0.8"
}

2-2.禁用自动转换下划

Header设置参数convert underscores=False

不会把-转换为_,但是大小写换是会转换的

2-2-1.案列

from typing import Union

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    accept : Union[str, None] = Header(default=None, convert_underscores=False),
    accept_language: Union[str, None] = Header(default=None, convert_underscores=False)
):
    return {"Accept": accept, "Accept-Language": accept_language}
http://127.0.0.1:8000/items/

{
    "Accept": "*/*",
    "Accept-Language": null
}

2-2-2.说明Accept为什么会被识别到

# 因为convert_underscores不会干扰大小写转换,所以read_items中可以识别到accept参数
Accept ->  Header(default=None, convert_underscores=False) -> accept

# 因为convert_underscores不会转换-,服务端识别的accept_language,所以不认识accept-language
Accept-Language -> Header(default=None, convert_underscores=False) -> accept-language

2-2-3.修改Accept-Language

只需要把Accept-Language中的横杠改为下划线Accept_Language

http://127.0.0.1:8000/items/

{
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9,zh-TW;q=0.8"
}

2-3.重复的Header参数

from typing import Union, List

from fastapi import FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(token: Union[List[str], None] = Header(default=None)):
    return {"Token": token}
http://127.0.0.1:8000/items/

{
    "Token": [
        "abc",
        "qwer"
    ]
}

标签:None,Union,items,accept,Header,Cookie,Accept
From: https://www.cnblogs.com/lxd670/p/17657633.html

相关文章

  • 【解决了一个小问题】aws s3 sdk 中的自定义header设置哪些不参与aws v4 签名
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯在通过代理访问s3服务端的时候,s3服务端返回类似的错误信息:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><Error><Code>AuthorizationQueryParametersE......
  • 【web】Cookie/Session
    会话:用户打开了一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话有状态会话:记录曾经来过一个网站怎么证明你来过客户端  服务器1,服务端给客户端一个信件,客户端下次访问服务端得时候带上信件即可;cookie2,服务器登记你来过了,下次来得时候我来匹配......
  • PlayWright检测用户登录保存Cookie
    背景本需求以稀土掘金社区为例采用PlayWright包pipinstallplaywright思路用户打开软件,提示进入浏览器登录后进行操作将expect_response()的超时时间设置为无限毫秒expect_response()函数就是等待指定响应发生的方法通过手动抓包发现掘金社区登陆成功后响应返回接口地......
  • python爬虫连载26 Cookie和Session
    Cookie和SessionHTTP是无状态的,Cookie和Session则对此作了补充。其中Cookie是保存在客户端,Session保存在服务器端。Cookie是由服务器生成后发送给客户端的,浏览器会解析这些Cookie并将Cookie保存为一个本地文件,浏览器会自动将同一个服务器的任何请求绑定上这些Cookie。Cookie的工作......
  • CentOS7使用yum时File contains no section headers. file: file:///etc/yum.repos.d/
    CentOS7使用yum时Filecontainsnosectionheaders.file:file:///etc/yum.repos.d/CentOS-Base.repo,line:1'--2024-09-2221:08:17--http://mirrors.aliyun.com/repo/Centos-7.repo\n'安装好CenOS7后,自带的yum不能直接使用,使用会出现如下问题:原因是没有配置yum源,修改/e......
  • WPF datagrid ClipboardCopyMode="IncludeHeader"
    <DataGridItemsSource="{StaticResourcebooksData}"ClipboardCopyMode="IncludeHeader"/>       //xaml<Windowx:Class="WpfApp398.MainWindow"xmlns="http://schemas.microsoft.com/winfx/......
  • axios允许跨域cookie
    //添加请求拦截器service.interceptors.request.use( (config)=>{ ////在发送请求之前做些什么token //if(Session.get('token')){ // (<any>config.headers).common['Authorization']=`${Session.get('token')}`; //} //获取本......
  • RemoveCookieWall,Firefox 扩展
    您是否厌倦了网站上流行的横幅,以便您接受第三方cookie或结账?在这篇文章中,我解释了如何制作(并发布)一个firefox扩展以避免大多数网站出现这种情况信息此扩展的代码发布于https://github.com/jagedn/removecookiewall-addon您可以从https://addons.mozilla.org/es/firefox/addo......
  • 如何解决"Warning: Cannot modify header information - headers already sent"问题
    解决方法检查早期输出确保脚本在发送任何HTTP头前没有进行任何输出,包括空格、换行符或字符串。使用输出缓冲控制函数在脚本开始处使用ob_start()来启动输出缓冲。在需要发送HTTP头之前,确保输出缓冲已经被适当管理,例如使用ob_end_flush()来结束并输出缓冲内容。清......
  • 构建带headers-more-nginx-module的nginx
    Dockerfile#使用官方的Alpine基础镜像FROMalpine:latestARGVERSION=1.24.0#更新包列表并安装必要的依赖RUNsed-i's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'/etc/apk/repositoriesRUNapkupdate&&\apkadd--no-cachebuild-baselibgcczlib-dev......