天天看点

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

session关联

session是什么?

我们知道,用浏览器打开一个网页,用到的是HTTP协议,而这个协议是无状态的。也就是说,这一次的请求和上一次的请求是没有任何关系的,互不相认。所以就会产生一个问题,比如我在购物的时候,在某页面浏览了商品,购买时跳转第二个页面,由于是无状态的,第二个请求无法获取第一个页面的商品信息。

这时候就需要用到session机制了。就是当访问一个页面时给浏览器创建一个独一无二的号码,也给同时创建的session赋予同样的号码。这样就可以在打开同一个网站的第二个页面时获取到第一个页面中session保留下来的信息。这个号码就是sessionID,session的ID号,独一无二。

cookies就是把session的ID放在cookie里面(因为cookie有临时的也有定时的,而临时的就是当浏览器什么时候关掉即消失,也就是说session本来就是当浏览器关闭即消失,所以用临时的cookie存放。)

cookies是存放在客户端本地,而session的数据是保存在服务器端。

接口案例

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

如果后续的接口都需要依赖登录才能访问,那么就需要用到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'}

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

案例演示

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': '[email protected]', 'create_time': '2020-03-31'}]}

'''
           

cookies关联

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

我们第一次发请求到服务端,是不会带cookie的,服务器会返回一个cookie存储在客户端

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

发送第二次请求的时候,会带上这个cookie

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

案例演示

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/>]>
登录成功
'''
           

继续阅读