zoukankan      html  css  js  c++  java
  • 接口和HTTP协议(二)

    一、cookie,session,token

    1、cookie

    • http是无状态的,没有记性
    • cookie是让服务器记住你,
    • cookie是保存在浏览器中,是浏览器的一套机制
    • 浏览器cookie机制将cookie与域名,ip绑定在一起,当发送域名请求的时候,
      浏览器就会去查找与域名绑定在一起的cookie信息,将该信息一起发给服务器,
      服务器拿到后与服务器端保存的session信息进行校验

    • cookie可以存储任意的信息,不一定是用户信息

    2、session

    • http协议的规定
    • 在服务器记住用户信息状态,验证
    • session相关信息会存储在redis数据库(redis数据库:键/值对)
    • 服务器校验session:服务器返回session信息放到Headers中的Set-Cookie中,要客户端将session信息保存到cookie,客户下次发起请求的时候以cookie的形式再将session内容传回服务器,服务器将传回来的session值进行解密,校验用户信息以及时效是否正确

    3、token

    • 令牌,跨平台,一种权限,需要获取数据就需要token。比如12306购票系统,你需要先登陆,才能够买票,即,1、先需要访问登录接口;2、服务器等到用户信息,服务器根据用户信息生成token,并将token返回给客户端;3、客户端拿到用户身份token后,将token传入请求中,访问其他接口,获得相应接口数据
    • token一般是不需要保存的
    • token是开发定义的,token是用户信息+时间戳进行加密的值
    • token的鉴权:验证token的正确性,将传入的token解密后获取用户信息,校验用户是否存在;验证token的时效性,将传入的token解密后获取token的开始时间,将当前时间戳减去开始时间,时间小于过期时间,token就有效,反之失效

    4、三者之间的区别

     

    1)token VS session

    token是开发定义的,session是http协议规定的,token灵活性就强些

    token一般不需要存储(客户端获取后,到下一个接口使用时传入,中间无需存储),但session需要存储

    token可以跨平台(可以在pc、电视盒子上使用,也可以在手机端使用同一个token获取数据),
    但session不能跨平台,因为cookie是和域名,ip绑定在一起的

    2)cookie VS session

     存储的都是同一个用户的信息

    唯一的区别就是:cookie是存储在浏览器(客户端),session是存储在服务器端

    二、requests库

    1、安装:pip install requests

    2、是python用来发送http请求的第三方库

    3、Requests提供了很多功能特性,几乎涵盖了当今web服务的需求:
    浏览器式的ssl验证
    身份认证
    keep-Alive & 连接池
    流下载
    文件分块上传

    4、HTTP请求

    1)GET请求

    发送get请求

    不带参数:res = requests.get(url)

    带参数:res=requests.get(url,params)

    带cookie:res=requests.get(url,params,cookies=res.cookies)

    带请求头:headers={'User-Agent':'Mozilla/5.0'} res=requests.get(url,param,headers=headers)

    获取请求头:res.request.headers

    获取响应头:res.headers

    获取响应状态码:res.status_code

    获取cookie:res.cookies

    获取响应数据:

    res.json():返回的是json

    res.text:返回的是文本(字符串)服务器返回的数据格式是HTML、XML,都可以用res.text接收

    res.content:返回的是二进制数据,当返回的数据为图片、视频的时候,可使用res.content接收;不管你返回的是文本格式,json数据、图片还是视频,最开始的都是使用res.content接收的,都是二进制数据,输出的数据中b代表bytes;content方法中encoding编码:通过编码就是把二进制数据编码成人可以看懂的东西

    参数传递:url参数、query string查询字符串、通过body传参,服务收不到,传不到服务器

    准备参数:url、参数、请求头

    2) POST

    发送post请求

    不带请求参数:res=requests.post(url)

    带请求参数:param={'mobilephone':'13500000000','password':'123456'} res=requests.post(url,json=param)

    获得响应数据:

    res.json()获得json格式的返回数据

    参数传递:

    a、json格式数据,请求头部content-type=application/json,服务器才能接收到json数据,否则服务器接收不到请求数据

    b、form格式的数据,请求头部content-type=multipart/form-data,服务器才能接收到form表单的数据,否则服务器接收不到请求数据

    requests.post(url,headers=headers,data=data)在请求方法里面想传入form表单使用data=a,form表单参数的格式:a= {'age':18}

    c、query string:查询字符串   url后?参数

    d、xml格式数据:请求头部content-type=application/xml,服务器才能接收到xml的数据,否则服务器接收不到请求数据

    总结一句话:当content-type和数据格式不匹配,后端服务器是可以接收到的,但是开发写的代码不一定会获取到做处理,

    对于一个项目来说:到底用form-data,还是用json传递数据,由开发说了算

    3)通用方法:request

    request方法是自动测试用的最多的方法

    import requests

    url=""
    headers = {}
    param = {}
    data = {}/json = {}
    method = "get"/"post"/"put"/"delete"...
    resp = requests.request(method,url,data=data,json=json,**kwargs)

    为什么通用函数用的多?而不用get,post方法

    原因:每个接口的方法可能不一样,我们可以把测试数据分离,将method放入到测试用例数据中,这样就可以做数据驱动测试
    数据驱动测试的前提:测试用例数据用的函数的逻辑是一样的

    4)工具---调试接口所用的地址:http://httpbin.org/

    get请求地址:http://httpbin.org/get

    post请求地址:http//httpbin.org/post

    本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/14278696.html

  • 相关阅读:
    oracle里的查询转换
    Oracle里的优化器
    转:oracle几组重要的常见视图-v$undostat,v$open_cursor,v$rowcache,v$session_longops,v$waitstat
    转:oracle几组重要的常见视图-v$segstat,v$segment_statistics,v$filestat,v$rollstat
    转:oracle几组重要的常见视图-v$latch,v$latch_children,v$lock,v$locked_object
    转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs
    转:oracle几组重要的常见视图-v$process,v$session,v$session_wait,v$session_event
    第三方引擎应用场景分析--Tokudb,infobright
    mysql 常见参数
    Uep的静态下拉和动态下拉建立
  • 原文地址:https://www.cnblogs.com/lynne-wu/p/14278696.html
Copyright © 2011-2022 走看看