python csrf token_python接口自动化12-案例分析(csrfToken)

本文介绍了如何在登录网站时,当csrfToken存储在cookie中且登录前后不变的情况下,绕过图形验证码进行自动化登录。通过抓包分析登录请求,获取必要的cookie参数,然后在后续的get和post请求中携带这些参数,实现无验证码登录。在遇到重定向导致cookie丢失的问题时,可以通过禁止重定向,获取重定向URL后再发送带cookie的请求来解决。
摘要由CSDN通过智能技术生成

前言:

有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢?

一、登录前后对比

1.如果登录页面有图形验证码,这种我们一般都是绕过登录的方式,如下图通过抓包分析,首先不输入密码,抓包

(由于这个是别人公司内部网站,所以网址不能公开,仅提供解决问题的思路)

2.在登录页面输入账号和密码手动登录后,抓包信息如下

3.抓包后cookies信息在登录前后没任何变化,这里主要有三个参数:

--businessUsername:这个是账号名称

--JSESSIONID: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行

--csrfToken: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行

二、get请求

1.像这种登录方式的get请求,请求头部cookie没任何变化,这种可以直接忽略登录,不用管登录过程,直接发请求就行

2.代码实现

# coding:utf-8

import requests

# 优惠券列表

url = 'http://xxx/xxx/coupon/list'

h = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

"Accept": "text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Cookie": "csrfToken=xxx(复制抓包的信息); JSESSIONID=xxx(复制抓包的信息); businessUsername=(用户名)",

"Connection": "keep-alive"

}

r = requests.get(url, headers=h)

print r.content

三、post请求遇到的坑

1.post请求其实也可以忽略登录的过程,直接抓包把cookie里的三个参数(businessUsername、JSESSIONID、csrfToken)加到头部也是可以的。

2.但是这里遇到一个坑:用Composer发请求,重定向回到登录页了

3.主要原因:重定向的请求,cookie参数丢失了

四、重定向

1.解决上面问题,其实很简单,把重定向禁用(具体看2.8重定向Location这篇)后的链接获取到,重新发个get请求,头部带上cookies的三个参数就行了

# coding:utf-8

import requests

# 主要是post请求后重定向,cookie丢失,所以回到登录页面了

# 解决办法,禁止重定向,获取重定向的url后,重新发重定向的url地址请求就行了

# 三个主要参数

csrfToken = '获取到的csrftoken,一般有有效期的'

jsessionId = '获取到的jsessionid'

userName = '用户名'

url = 'http://xxx/xxxx/update'

h1 = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0",

"Accept": "text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName),

"Connection": "keep-alive",

"Content-Type": "application/x-www-form-urlencoded",

"Content-Length": "115"

}

body = {"instantMessageId":"56",

"name": u"哈哈1",

"order": "",

"csrfToken": csrfToken,

"type": "qq",

"account": "1001"}

s = requests.session()

r1 = s.post(url, headers=h1, data=body, allow_redirects=False)

print r1.status_code

# 获取重定向的url地址

redirect_url = r1.headers["Location"]

print redirect_url

h2 = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0",

"Accept": "text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName),

"Connection": "keep-alive"

}

r2 = s.get(redirect_url, headers=h2)

print r2.content

--------------python接口自动化已出书------------

https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695

Tag标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值