前言
有些登录不是用cookie来验证的,是用token参数来判断是否登录。
token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已(王老吉换成加多宝而已);另外一种是在url请求参数里,这种更直观。
一、登录返回token
1.如下图的这个登录,无cookies
2.但是登录成功后有返回token
二、请求头带token
1.登录成功后继续操作其它页面,发现post请求的请求头,都会带token参数
2.这种请求其实比cookie更简单,直接把登录后的token放到头部就行
三、token关联
1.用脚本实现登录,获取token参数,获取后传参到请求头就可以了
2.如果登录有验证码,前面的脚本登录步骤就省略了,自己手动登录后获取token
# coding:utf-8 import requests
header = { # 登录抓包获取的头部 "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"} # 这里账号密码就是抓包的数据
s = requests.session() login_url = "http://xxx.login" # 自己找带token网址 login_ret = s.post(login_url, headers=header, data=body) # 这里token在返回的json里,可以直接提取 token = login_ret.json()["token"]
# 这是登录后发的一个post请求 post_url = "http://xxx" # 添加token到请求头 header["token"] = token # 如果这个post请求的头部其它参数变了,也可以直接更新 header["Content-Length"]="9" body1 = { "key": "value" } post_ret = s.post(post_url, headers=header, data=body1) print post_ret.content
四、其它token 返回token的值,有的藏在cookie里,有的直接在返回的json里,也有的在返回的xml页面或者html里,形式各种各样,自己去找。
传token的方式也有几种,有的传在头部,有的在url里。
selenium高级自动化》已出书,阅读全本可以购买此书(点左下角阅读原文)https://yuedu.baidu.com/ebook/0f6a093b7dd184254b35eefdc8d376eeaeaa17e3
|