100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用

delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用

时间:2018-12-01 17:35:34

相关推荐

delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用

——————·今天距258天·——————

这是ITester软件测试小栈第113次推文

在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie、session应用,介绍了cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态。

以下介绍Token原理及在自动化中的应用。

Token基本概念及原理

1Token作用为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。2什么是Token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3Token运行原理

1.当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值会在服务器保存token值(保存在数据库中),再将这个token值返回给客户端;

2.客户端拿到 token 值之后,进行保存 (保存位置由服务器端设置);

3.以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器;

4.服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值进行比较;

5.如果两个 token 值相同, 说明用户登录成功过,当前用户处于登录状态;

6.如果没有这个 token 值, 没有登录成功;

7.如果 token 值不同,说明原来的登录信息已经失效,让用户重新登录;

4Token认证优点

无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.

可重用性:在多个平台和域(domains)上运行,重复使用相同的令牌来验证用户,很容易构建与其他应用程序共享权限的应用程序。

安全性:由于我们没有使用 Cookies,我们不必再防御网站的跨站点请求伪造(CSRF)攻击。

5Token和Cookie、Session 的选型

对于只需要登录用户并访问存储在站点数据库中的一些信息的中小型网站来说,Session Cookies 通常就能满足。如果有企业级站点,应用程序或附近的站点,并且需要处理大量的请求,尤其是第三方或很多第三方(包括位于不同域的API),则 token显然更适合。

Token实战

讲了那么多概念和原理,很多小伙伴可能不知道token长啥样,接下来以接口登录为例。

importrequests

url='http://127.0.0.1:8000/user/login/'

payload={

"username":"vivi",

"password":"123456"

}

res=requests.post(url,json=payload)

print(res.text)

响应结果如下:

{

"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NDg5NzgsImVtYWlsIjoidml2aUBxcS5jb20ifQ.a2ExtNVjGrY8T1gefcJTnk4JUOx9NVtCk6lMK8o47co",

"user_id":1,

"username":"vivi"

}

响应结果有返回token,但是token要怎么用呢,不急,我们一步步来。假设现在有个项目列表的接口,在不登录的前提下,不能访问。

importrequests

url='http://127.0.0.1:8000/projects/'

pro_res=requests.get(url)

print(pro_res.json())

响应结果:提供认证信息

{'detail':'身份认证信息未提供。'}

项目列表接口需要携带token,服务器校验成功后,才能成功返回信息

重点来了,如何从登录接口获取token,项目列表接口又如何携带token?

访问登录接口,并获取token。

importrequests

url='http://127.0.0.1:8000/user/login/'

payload={

"username":"vivi",

"password":"123456"

}

login_res=requests.post(url,json=payload)

#从响应结果中获取token值

token=login_res.json()["token"]

print("token:",token)

响应结果为:

token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NTEyMjksImVtYWlsIjoidml2aUBxcS5jb20ifQ.neqVM5MFGuFbKIUOCqW_qXBajhTTQMfmAs2PWTkEMes

那项目列表接口又如何携带token呢,token直接加在请求头,这样就可以了么,当然不是,我们还需要在token前加上前缀,前缀由后端设置,见过最多的前缀是:Bearer,不清楚的参照接口文档。

项目列表携带token访问。

importrequests

url='http://127.0.0.1:8000/projects/'

#拼接最终的token,注意中间有个空格

token="Bearer"+""+token

headers={

"authorization":token

}

pro_res=requests.get(url,headers=headers)

print(pro_res.json())

响应结果为:

{

"count":2,

"results":[

{

"id":1,

"name":"自动化测试平台项目1",

"tester":"vivi"

},

{

"id":2,

"name":"自动化测试平台项目2",

"tester":"coco"

}

],

"total_pages":1,

"current_page_num":1

}

总结:本文主要介绍token基本概念、运行原理及在自动化中接口如何携带token进行访问。

下一篇:requests封装,比较重要,离最终的框架又进了一步。

以上That‘s all更多系列文章敬请期待ITester软件测试小栈往期内容宠幸1.Fiddler基本使用

2.Fiddler抓包介绍

3.Fiddler请求过滤

4.Fiddler设置断点(一)

5.Fiddler跨域调试及Django跨域处理

6.Python接口自动化-接口基础(一)

7.Python接口自动化-接口基础(二)

8.Python接口自动化-requests模块之get请求

9.Python接口自动化-requests模块之post请求

10.Python接口自动化之cookie、session应用

快来星标 置顶 关注我

后台回复资源取干货回复与我共同成长

想要获取相关资料和软件?

测试交流Q群:727998947

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。