1.token-令牌
- Token也是由服务器产生的,存在服务器的内存或硬盘中
- 由一套产生规则,会涉及到加密算法
- 【用Token 来实现登录】
- 开发提供一个获取Token接口,根据用户名+密码,获取一个Token值-返回一个Token(字符串)
- Token值服务器通过什么客户端的呢?
- 通过响应头给客户端。 ------ 次要
- 通过响应消息体传给客户端。 ---- 主要
- 通过Cookie传递给客户端 — 很少
获取token值
# 02 获取token值
import requests
import hashlib
# 1.项目的服务器地址+端口号
# from configs.config import HOST 报错
from config import HOST
# md5加密
def get_md5(password):
# 1.示例化md5加密对象
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
return md5.hexdigest()
"""
登录接口的特性:
1- 作为普通的接口测试
2- 需要获取token给后续接口关联
"""
# 接口自动化项目实战
class Login:
# 2.封装登录函数
def login(self,inData,getToken=False):
# 1. url
url = f'{HOST}/account/sLogin'
# 2. 请求体---- 字典格式编辑
# 调用加密函数 字典修改值:字典名【键名】 = 新的值
inData['password'] = get_md5(inData['password'])
payload = inData # 可以不写
resp = requests.post(url, data=payload)
if getToken == True: #获取token值
return resp.json()['data']['token'] #token值
else:
return resp.json() #接口的响应值
if __name__ == '__main__':
res = Login().login({'username':'xxxx','password':'xxxx'},getToken=False)
print(res)
2. Cookie
- Cookie是分站点的,站点和站点之间的Cookie是相互独立的
- 浏览器的Cookies是保存在浏览器的某个位置的
- 服务器端可以通过:响应头中的set-Cookie参数,对客户端的Cookie进行管理
- 浏览器的每次请求,都会把该站点的Cookie发送给服务器
- 实现登录:Cookie + Session 配合使用的。
3. SessionId -翻译为会话
- session 是一个对象,是服务器产生的,保存在服务器的内存中的
- session有自己的管理机制:包括session产生、销毁、超市等
- sessionID是session对象的一个属性,是全局唯一的,永远都不会重复的
总结:
1.token:
- 一般需要账号与密码通过特定的接口(登录/获取token接口)去服务器访问,才能返回一个token
2.cookie—sessionID - 会话id,只要访问这个应用浏览器就会返回一个session–一般在响应头里 set-cookies:jsessionid=xxxxxx
Cookie&sessionId合作
一. 快速理解
用户登录成功服务器创建session,返回给客户端。客户端浏览器把session保存在它的cookie中。
二. 过程描述
- 登录成功服务器立马创建session,并通过【响应头】中的set-Cookie属性把session返回给客户端
- 浏览器把响应头中的set-cookie内容存起来,存在浏览器自己的cookie中
- 以后浏览器每次发送请求时,都会把该站点的全部cookie通过请求头中,传递给服务器
token鉴权
# 03.token鉴权
# 店铺的模块
import requests
# from configs.config import HOST # 报错
from config import HOST
from login import Login # 调用login类
class Shop: # 每一次或者每一个店铺的实例,都需要鉴权一次
def __init__(self,inToken):
self.header = {'Authorization':inToken}
# 1.列出店铺
def shop_list(self,inData):
# 1.url配置 参数是在url ? 后面的
url = f'{HOST}/shopping/myShop'
# 2.参数
payload = inData
# 3.发请求,把鉴权传过去
resp = requests.get(url,params=payload,headers=self.header)
return resp.text
if __name__ == '__main__':
# 1.先登录
token = Login().login({'username':'xxxx','password':'xxx'},getToken=True)
# 2.店铺列出接口调用
res = Shop(token).shop_list({'page':1,'limit':20})
print(res)
import requests
# 01 登录接口
def login():
# 1.url
url = 'http://xxxxx'
# 2.body
payload = {'username':'xxx','password':'xxx'}
# 3.发送请求
resp = requests.post(url, data=payload)
return resp.json()
if __name__ == '__main__':
res = login()
print(res)
cookie【直接关联原始cookies】
import requests
# 02 cookie【直接关联原始cookies】
# 封装一个登录函数
def login():
# 1.url
url = 'http://xxxxx'
# 2.body
payload = {'username':'xx','password':'xxxx'}
# 3.发送请求
resp = requests.post(url, data=payload)
return resp.cookies #cookies对象 直接关联原始cookies
# 2.列出课程
def lesson_list(inData,inCookie):
# 1.url
url = 'http://xxxx/'
# 2.body
payload = inData
# 3.发送请求
resp = requests.get(url, params=payload,cookies=inCookie)
# 如果响应体出现编码,不是你需要的中文
# 设置响应编码
resp.encoding = 'unicode_escape'
return resp.text # 响应体
if __name__ == '__main__':
# 1.登录
res = login()
print(res)
# 2.列出课程
print(lesson_list({"action":"list_course","pagenum":1,"pagesize":20},res))
如果项目需求,需要定制化cookies:sessionid+token -需要直接封装
import requests
# 封装一个登录函数
def login():
# 1.url
url = 'http://xxxxx'
# 2.body
payload = {'username':'xx','password':'xxxxx'}
# 3.发送请求
resp = requests.post(url, data=payload)
return resp.cookies #cookies对象 【直接关联原始cookies】
# 如果项目需求,需要定制化cookies:sessionid+token -需要直接封装
# cookies里面就是sessionID --直接取出sessionID
return resp.cookies['sessionid']
# 2.列出课程
def lesson_list(inData,inCookie):
# 1.url
url = 'http://xxx'
user_cookie = {'sessionid':inCookie,'token':'ss'} # 自己封装 放入定制化token,无则不放
# 2.body
payload = inData
# 3.发送请求
resp = requests.get(url, params=payload,cookies=user_cookie)
print(resp.request.headers) # 打印头
# 如果响应体出现编码,不是你需要的中文
# 设置响应编码
resp.encoding = 'unicode_escape'
return resp.text # 响应体
if __name__ == '__main__':
# 1.登录
res = login()
print(res)
# 2.列出课程
print(lesson_list({"action":"list_course","pagenum":1,"pagesize":20},res))
小结:
字典–转化–json格式
json.dumps(字典)
json格式–转化–字典
json.loads(json格式)



