python接口自动化12-案例分析(csrfToken)
Posted jason89
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python接口自动化12-案例分析(csrfToken)相关的知识,希望对你有一定的参考价值。
前言:
有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢?
一、登录前后对比
1.如果登录页面有图形验证码,这种我们一般都是绕过登录的方式,如下图通过抓包分析,首先不输入密码,抓包
(由于这个是别人公司内部网站,所以网址不能公开,仅提供解决问题的思路)
2.在登录页面输入账号和密码手动登录后,抓包信息如下
.抓包后cookies信息在登录前后没任何变化,这里主要有三个参数:
--businessUsername:这个是账号名称
--JSESSIONID: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行
--csrfToken: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行
二、get请求
1.像这种登录方式的get请求,请求头部cookie没任何变化,这种可以直接忽略登录,不用管登录过程,直接发请求就行
1 2.代码实现 2 # coding:utf-8 3 import requests 4 # 优惠券列表 5 url = ‘http://xxx/xxx/coupon/list‘ 6 h = { 7 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0", 8 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 9 "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 10 "Accept-Encoding": "gzip, deflate", 11 "Cookie": "csrfToken=xxx(复制抓包的信息); JSESSIONID=xxx(复制抓包的信息); businessUsername=(用户名)", 12 "Connection": "keep-alive" 13 } 14 r = requests.get(url, headers=h) 15 print r.content
三、post请求遇到的坑
1.post请求其实也可以忽略登录的过程,直接抓包把cookie里的三个参数(businessUsername、JSESSIONID、csrfToken)加到头部也是可以的。
2.但是这里遇到一个坑:用Composer发请求,重定向回到登录页了
3.主要原因:重定向的请求,cookie参数丢失了
四、重定向
1.解决上面问题,其实很简单,把重定向禁用(具体看2.8重定向Location这篇)后的链接获取到,重新发个get请求,头部带上cookies的三个参数就行了
1 # coding:utf-8 2 import requests 3 # 主要是post请求后重定向,cookie丢失,所以回到登录页面了 4 # 解决办法,禁止重定向,获取重定向的url后,重新发重定向的url地址请求就行了 5 6 # 三个主要参数 7 csrfToken = ‘获取到的csrftoken,一般有有效期的‘ 8 jsessionId = ‘获取到的jsessionid‘ 9 userName = ‘用户名‘ 10 11 12 url = ‘http://xxx/xxxx/update‘ 13 h1 = { 14 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0", 15 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 16 "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 17 "Accept-Encoding": "gzip, deflate", 18 "Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName), 19 "Connection": "keep-alive", 20 "Content-Type": "application/x-www-form-urlencoded", 21 "Content-Length": "115" 22 } 23 24 body = {"instantMessageId":"56", 25 "name": u"哈哈1", 26 "order": "", 27 "csrfToken": csrfToken, 28 "type": "qq", 29 "account": "1001"} 30 31 s = requests.session() 32 r1 = s.post(url, headers=h1, data=body, allow_redirects=False) 33 print r1.status_code 34 # 获取重定向的url地址 35 redirect_url = r1.headers["Location"] 36 print redirect_url 37 38 h2 = { 39 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0", 40 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 41 "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 42 "Accept-Encoding": "gzip, deflate", 43 "Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName), 44 "Connection": "keep-alive" 45 } 46 r2 = s.get(redirect_url, headers=h2) 47 print r2.content
以上是关于python接口自动化12-案例分析(csrfToken)的主要内容,如果未能解决你的问题,请参考以下文章
python + requests 接口自动化教程 (案例最多-教程最完善)