python接口测试(二)-- session/cookies关联

session关联

session是什么?

我们知道,用浏览器打开一个网页,用到的是HTTP协议,而这个协议是无状态的。也就是说,这一次的请求和上一次的请求是没有任何关系的,互不相认。所以就会产生一个问题,比如我在购物的时候,在某页面浏览了商品,购买时跳转第二个页面,由于是无状态的,第二个请求无法获取第一个页面的商品信息。
这时候就需要用到session机制了。就是当访问一个页面时给浏览器创建一个独一无二的号码,也给同时创建的session赋予同样的号码。这样就可以在打开同一个网站的第二个页面时获取到第一个页面中session保留下来的信息。这个号码就是sessionID,session的ID号,独一无二。
cookies就是把session的ID放在cookie里面(因为cookie有临时的也有定时的,而临时的就是当浏览器什么时候关掉即消失,也就是说session本来就是当浏览器关闭即消失,所以用临时的cookie存放。)
cookies是存放在客户端本地,而session的数据是保存在服务器端。

接口案例

在这里插入图片描述
如果后续的接口都需要依赖登录才能访问,那么就需要用到session机制了,即只登录一次,后面的请求会默认的带到token头部信息。

import requests

s = requests.session()  # 创建一个session会话,模拟浏览器功能
print(s.headers)
print(s.cookies)
url = 'http://xx.xx.xx.xx:9000/api/v1/login'
body = {
    'username': 'test',
    'password': '123456'
}
re = s.post(url, json=body)
print(re.json())

# token
token = re.json()['token']
print('获取的token:%s' % token)

h = {'Authorization': 'Token %s' % token}
s.headers.update(h) # 更新到session会话
# 更新之后的头部
print(s.headers)

'''
=======================================================================================================================
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
<RequestsCookieJar[]>
{'code': 0, 'msg': 'login success!', 'username': 'test', 'token': 'a1e27565bcbfa0a950f3b041a1e38bf0b9d2a45d'}
获取的token:a1e27565bcbfa0a950f3b041a1e38bf0b9d2a45d
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Token a1e27565bcbfa0a950f3b041a1e38bf0b9d2a45d'}

'''

在这里插入图片描述
案例演示

import requests

s = requests.session()  # 创建一个session会话,模拟浏览器功能

# 1.登录
host = 'http://xx.xx.xx.xx:xxx'
login_url = host + '/api/v1/login'
login_body = {
    'username': 'test',
    'password': '123456'
}
re = s.post(url=login_url, json=login_body)
print(re.json())

# token
token = re.json()['token']
print('获取的token:%s' % token)

h = {'Authorization': 'Token %s' % token}
s.headers.update(h) # 更新到session会话
# 更新之后的头部
print('更新之后的头部:%s' % s.headers)

# 2.获取个人信息
getInfo_url = host + '/api/v1/userinfo'
r = s.get(url=getInfo_url)
print(r.json())

'''
运行结果:
=================================================================================================
{'code': 0, 'msg': 'login success!', 'username': 'test', 'token': 'fea9a5e6521c87e1312335b85a01263fd536432a'}
获取的token:fea9a5e6521c87e1312335b85a01263fd536432a
更新之后的头部:{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Token fea9a5e6521c87e1312335b85a01263fd536432a'}
{'msg': 'sucess!', 'code': 0, 'data': [{'id': 105, 'name': 'test', 'sex': 'M', 'age': 20, 'mail': '283340479@qq.com', 'create_time': '2020-03-31'}]}

'''

cookies关联

在这里插入图片描述
我们第一次发请求到服务端,是不会带cookie的,服务器会返回一个cookie存储在客户端
在这里插入图片描述
发送第二次请求的时候,会带上这个cookie
在这里插入图片描述

案例演示

import requests
import re

url = 'http://xx.xx.xx.xx:xxxx/admin/login/?next=/admin/'
s = requests.session()
# 没访问服务器之前cookie为空
print(s.cookies)

# 第一次访问服务器,服务器返回cookie,session会自动保存
r1 = s.get(url)
print(s.cookies)

# 第二次发送登录请求
# 由于csrfmiddlewaretoken参数被隐藏,所以在页面看不到,但是发送请求的时候有这个参数
# 这个参数是第一次访问时,根据cookie自动生成的,所以需要用到re模块,通过正则表达式提取
csrfmiddlewaretoken = re.findall("name='csrfmiddlewaretoken' value='(.+?)'", r1.text)

body = {
    'csrfmiddlewaretoken': csrfmiddlewaretoken[0],
    'username': 'xxx',
    'password': 'xxxxx',
    'next': '/admin/'
}
r2 = s.post(url, data=body)
# 判断是否登录成功
if 'Site administration | Django site admin' in r2.text:
    print('登录成功')
else:
    print('登录失败')
'''
运行结果:
========================================================================================================================
<RequestsCookieJar[]>
<RequestsCookieJar[<Cookie csrftoken=Dk4l1RP8XsCNmcGccSq2S17l4YIWyaGyLtuaVXzDXRCAsea1xwXoOytCZBbD87Pg for 49.235.92.12/>]>
登录成功
'''
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
make /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xproto.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/bigreq.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xc_misc.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/composite.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/damage.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/dpms.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/dri2.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/glx.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/randr.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/record.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/render.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/res.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/screensaver.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/shape.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/shm.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/sync.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xevie.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xf86dri.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xfixes.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xinerama.xml /usr/bin/python ./c_client.py -p //usr/lib/python3.8/site-packages //usr/share/xcb/xinput.xml Traceback (most recent call last): File "./c_client.py", line 1039, in <module> module.register() File "/usr/lib/python2.7/dist-packages/xcbgen/state.py", line 93, in register matcher.execute(self, self.namespace) File "/usr/lib/python2.7/dist-packages/xcbgen/matcher.py", line 115, in execute funcs[elt.tag](elt, module, namespace) KeyError: 'eventstruct' make: *** [Makefile:1018: xinput.c] Error 1
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值