当前位置: 主页 > 焦点 > 详情
环球播报:Python_16 session、cookie 鉴权

来源博客园   2023-05-09 04:57:40


【资料图】

一、查缺补漏

1. pprint     https://www.cnblogs.com/yjybupt/p/10669988.html     https://www.cnblogs.com/wongbingming/p/12854618.html  2. 鉴权:     http://testingpai.com/article/1621929988356  3. import json     json.dump() 转成json     json.loads() 转成字符串  4. cookie可以带各种 可以带session,session+token,token可以通过set-cookie传,也可以通过别的请求头传,这些都是灵活的,全看后端开发怎么解析,session一般是只能通过响应的set-cookie返回,请求的时候再通过cookie字段带过去二、鉴权  1. session、cookie 鉴权     a. 使用MD5、RSA(看不懂的字符串)加密,创建一个session对象id和cookie存在mysql或者redis(非关系型数据库)中    b. cookie是前端的一种缓存机制,参数存在缓存里,session是后端生成的    c. 不知道是什么鉴权可以去问开发  2. token 鉴权 解放了缓存,不用存储,每次都要计算,消耗cpu但是不消耗内存,cpu比较便宜     a. 注册(数据库存储用户名和密码)     b. 登陆(提交用户名+密码)     c. 后端获取到用户名密码(进行校验密码和用户名是否与数据库存储的一致)     d. 给我令牌(token)     e. 算法生成token(rootAa12345620412010) 生成token和解析token的规则是固定的     f. 返回给客户端     g. 客户端再次请求接口带上token     h. 后端接收到token并解析token(rootAa12345620412010)     i. 抽取时间戳(20412010)和id10用户的唯一标识     j. 通过用户唯一标识去数据库找到生成token需要的数据     k. 再生成一次token(rootAa12345620412010) 时间戳都是使用之前传递的时间戳,当再次生成时才换掉     l. 拿新生成的和你给我的对比 + 时间戳间隔对比      用当时的时间戳和之前的做对比(间隔多长时间是由后端决定的)判断token时效是否过期      m. token一致就返回接口数据   3. session、cookie 鉴权和token 鉴权的区别     a. session会消耗内存要到库里对比,token不消耗内存只需要cpu计算     b. token相对安全,使用RSA非对称加密,但是token可逆     c. session会通过存储一般是不可逆的   4. 重点     a. token生成规则(后端决定)     b. 如何校验token正确性、如何校验token有效时间     c. token替换规则(后端决定)     d. 用例执行时token失效,直接重新获取就好,异常捕获,重新获取token,pytest可以错误重试     e. 鉴权方式和token有效时间可以问开发三、requests  1. 一些概念:    a. 什么叫接口      i. USB:传数据      ii. 互联网:用来传数据    b. 接口必要数据      i. 请求地址: https://openapiv5.ketangpai.com/UserApi/login      ii. 请求方法:post、get      iii. 请求数据:      iv. 响应参数:    c. 使用:requests支持所有的http请求方式  2. get请求:requests.get(url=url,params=None,**kwargs)    a. url:请求地址    b. params=None:请求参数    c. **kwargs:其他字段    d. 参数放在url后面:直接拼接可一个新的url       如 url :"http://httpbin.org/get?key1=val1&key2=val2"    e. 参数使用params关键字接收,会自动拼接到url地址后面    f. ?:表示后面都是查询参数,key1=val1形式展示,多个参数使用&进行连接  3. post请求 requests.post(url,data=None,json=None,**kwargs)    a. url: 请求地址    b. data=None:请求参数    data关键字:默认form表单"Content-Type": "application/x-www-form-urlencoded"    如果设置请求头headers = {"Content-Type": "application/json;charset=UTF-8"},就使用设置的方式    c. json=None:请求参数     json关键字:默认json模式 "Content-Type": "application/json;charset=UTF-8"    如果设置请求头headers = {"Content-Type": "application/x-www-form-urlencoded"},就使用设置的方式    d. **kwargs:接收其他字段  4. post的参数格式    a. application/x-www-form-urlencoded    默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码,空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值。    窗体数据被编码为:名称/值对,这是标准的编码格式。    b. application/json    数据以 JSON 形式进行编码    c. multipart/form-data,头像    窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分,上传附件用到。在使用包含文件上传控件的表单时,必须使用该值。    d. text/html    文本方式的网页文件。    e. text/xml    文本方式的 XML 文件,text/xml 忽略 XML 头所指定编码格式而默认采用 US-ASCII 编码。    f. text/plain    窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。空格转换为 “+” 加号,但不对特殊字符编码。    g. application/xml    数据以 XML 形式进行编码,application/xml 会根据 XML 头指定的编码格式来编码。三、POST与GET区别  1. 参数传递    get:放在请求地址后面,查询数据,向后端获取数据,传的是查询参数(where条件)    post:放在body里面,提交参数,OCR参数、图片、文件  2. 参数长度    get、post参数长度实际上是由后端配置决定,并不是请求本身决定    get请求会做参数大小的限制:比较小    post请求也会做参数大小限制:稍微大一些  3. 安全性    get参数暴露在浏览器地址上    post放在body里面,需要抓包才能看见  4. 幂等性    a. 处理同一个请求的重复发送的方式      get请求查询一次和查询N次得到的结果都是一样 select * from user where id = 100;      post请求提交数据:注册,需要做幂等处理 insert into tabel()value();    b. 金融行业前端防多点(防止并发),后端幂等(请求数据一样,则只处理一条请求)