为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的,只是换个单词而已;另外一种是在 url 请求参数里,这种更直观
token关联 我们工作中在调用接口的时候,需要登录接口返回的token,这个token一般我们是从相应里面提取出来,然后加到headers里面. 另外还有一种token是Authorization 这种一般响应返回是用拼接的方式 组成新的token.
step1.那么要提取登录成功的token.写个登录方法讲返回的token加到headers 这个字典中.
step2 其他接口调用:讲有token的headers传进去即可
案例:
正常headers一般重要的信息有 Content-Type, token/Authorization ,User-Agent
# coding:utf-8
import requests
# Python requests 移除SSL认证,verify=False,取消控制台输出的InsecureRequestWarning警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def login_token():
headers = { # 登录抓包获取的头部
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Content-Length": "423",
"Connection": "keep-alive"
}
body = {"key1": "value1",
"key2": "value2"} # 这里账号密码就是抓包的数据
# 创建一个session会话
s = requests.session()
login_url = "http://xxx.login" # 自己找带token网址
login_ret = s.post(login_url, headers=headers, data=body)
# 这里token在返回的json里,可以直接提取
token = login_ret.json()["token"]
# 添加token到请求头
headers["token"] = token
return headers # 将带有token的请求头返回
# 这是登录后发的一个post请求
post_url = "http://xxx"
# 如果这个post请求的头部其它参数变了,也可以直接更新
header["Content-Length"]="9"
body1 = {
"key": "value"
}
post_res = s.post(post_url, headers=login_token(), data=body1,verify=False)
print(post_res.content.decode("utf8"))
Token的意义及用法
一.Token的来源:
当客户端多次向服务端请求数据时,服务端就需要多次从数据库中查询用户名和密码并进行对比,判断用户名和密码是否正确,并作出相应提示。但这样无疑会增加服务器端的运行压力,是否可以有一种方式只需要验证用户就是之前的用
户而不需要每次在客户端请求数据时都需要查询数据库判断用户名和密码是否正确。在这种请求下,引入了token来解决服务器端多次访问数据库问题。
1、什么是Token:
Token是服务端端生成的一串字符串,作为客户端进行请求时辨别客户身份的的一个令牌。当用户第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
2、使用Token的目的:
Token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
二. Token的运用流程:
1、当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值,会在服务器保存token值(保存在数据库中),再将这个token值返回给客户端;
2、客户端拿到 token 值之后,进行保存 (保存位置由服务器端设置);
3、以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.;
4、服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值进行比较;
5、如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态;
6、如果没有这个 token 值, 没有登录成功;
7、如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录;
8、Django Rest framework中JWT的使用稍有差异,这里不做详细说明