python接口自动化: CAS系统验证,自动完成登录并获取token,遇到302请求重定向设置(requests模块 allow_redirects=False)即可
import requests
import re
import requests
import re class Crm_token(object):
try:
username=int(input("请输入登录手机号:\n"))
password=input("请输入登录密码:\n")
except Exception as error:
print("登录信息输入错误,错误信息%s"%(error))
def __init__(self):
self.url_login_in='http://xxxx'
self.login_server='http://xxx/cas/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.Imh0dHA6XC9cLzQ3LjEwNi4xNzguNDk6ODA4MlwvIg.8HSZHPyW7byY-MOVtFhdsiy_cpigL3RcStk9hGa8Su8'
self.return_url="http://xxxx/?return_url=xxx/"
def get_token(self,username=username,password=password):
headers_check_login={"Content-Type":"application/x-www-form-urlencoded"}
url_check_login='http://xxxx/Auth/checkLogin' #用户名密码验证接口
check_login_data='username=%d&password=%s'%(username,password)
request_check_login=requests.post(url=url_check_login,headers=headers_check_login,data=check_login_data)
response_login_message=request_check_login.json()
# print(response_login_message)
if response_login_message['msg'] == '成功' and response_login_message['code']==200:
print('begin---login---')
try:
session=requests.Session() #建立session会话
headers1={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36",
"Referer":self.return_url,"Content-Type":'application/x-www-form-urlencoded'}
url_login_1=self.url_login_in+'/CAS_server/login?action=getlt&service=%s&callback=jQuery33105752563290575323_1551706407492&_=1551706407493'%(self.login_server)
request1=session.request("GET",url=url_login_1,headers=headers1,data=None) #登录前动态参数获取url
response1=request1.text
get_shouquan_str1=eval(re.search('{.*}',response1).group()) #匹配出字典内的内容并用eval方法将str转换为dict
get_lt=get_shouquan_str1['lt'] #提取授权参数1
get_execution=get_shouquan_str1['execution'] #提取授权参数2
cookies_login_1=request1.cookies.get_dict() #获取cookie:JSESSIONID
seesionId=cookies_login_1['JSESSIONID']
requestSeesionId=str('JSESSIONID='+seesionId) #拼接为请求可用的cookie值
# print(requestSeesionId)
# print(get_lt)
# print(get_execution)
headers2={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36",
"Content-Type":'application/x-www-form-urlencoded',"Cookie":requestSeesionId,"Referer":self.return_url}
url_login_2=self.url_login_in+'/CAS_server/login?service=%s'%(self.login_server)
#请求信息头必须传cookie,否则会一直返回登录页面
login_data='lt=%s&execution=%s&_eventId=submit&username=%s&password=%s&submit=登录'%(get_lt,get_execution,username,password)
# login_data='lt=%s&execution=%s&_eventId=submit&username=%d&password=%s'%(get_lt,get_execution,username,password)
#登录body,将获取到对的两个动态参数也传进去
request2=session.post(url=url_login_2,headers=headers2,data=login_data.encode(),allow_redirects=False)
#allow_redirects=False,禁止请求重定向:为了获取重定向url,requests模块默认请求重定向
# request2=session.post(url=url_login_2,headers=headers2,data=login_data.encode(),allow_redirects=True)
response2=request2.text
responseHeaders2=request2.headers #获取reponse header
# print(response2)
# print(responseHeaders2)
url_chongdingxiang_st=responseHeaders2["location"] #获取重定向url
requests3=session.get(url=url_chongdingxiang_st,headers=headers2,data=None,allow_redirects=False)
response3=requests3.text
responseHeaders3=requests3.headers
php_session_cookie=responseHeaders3['Set-Cookie'] #获取php_session
php_session_id=re.search("(\w*\W*\w*)",php_session_cookie).group() #用正则匹配出所需要的php_session_id
# print(php_session_id)
# print(responseHeaders3)
url_chongdingxiang_get_ticket=responseHeaders3['location']#获取重定向url
headers3={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36",
"Content-Type":'application/x-www-form-urlencoded',"Set-Cookie":php_session_id,"Referer":self.return_url}
requests4=session.get(url=url_chongdingxiang_get_ticket,headers=headers3,data=None,allow_redirects=False)
response4=requests4.text
responseHeaders4=requests4.headers
# print(responseHeaders4)
url_chongdingxiang_ticket=responseHeaders4['location'] #获取重定向url
requests5=session.get(url=url_chongdingxiang_ticket,headers=headers3,data=None,allow_redirects=False)
response5=requests5.text
responseHeaders5=requests5.headers
# print(responseHeaders5)
# print(response5)
ticket_data=re.search('(ticket.*)',url_chongdingxiang_ticket).group() #用正则匹配出ticket以及对应的value
headers4={"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36",
"Content-Type":'application/x-www-form-urlencoded',"Referer":url_chongdingxiang_ticket} #将headers来源地址更改为url_chongdingxiang_ticket
url_get_token='http://xxxx/Auth/login' #登录接口
requests_get_token=session.post(url=url_get_token,headers=headers3,data=ticket_data)
reponse6=requests_get_token.json()
crm_system_token=reponse6['data']['token']
print('login---susscess---')
print('当前登陆手机号为:%s,token为:\n%s'%(username,crm_system_token))
return crm_system_token
except BaseException as error:
print('登录错误,token获取失败,\n错误信息:%s'%(error))
else:
print(response_login_message) if __name__=="__main__":
tk=Crm_token()
tk.get_token()
python接口自动化: CAS系统验证,自动完成登录并获取token,遇到302请求重定向设置(requests模块 allow_redirects=False)即可的更多相关文章
- python接口自动化(Cookie_绕过验证码登录)
python接口自动化(Cookie_绕过验证码登录) 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以 ...
- python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...
- python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功
1.首先在excel中填写好预期结果的值 这里判断接口成功的依据是预期结果值是否存在于接口的返回数据中. 一般接口的返回值都是json对象,我们需要将json对象转换为json格式的字符串 如下图,进 ...
- python接口自动化-Cookie_绕过验证码登录
前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
- python接口自动化23-token参数关联登录(登录拉勾网)
前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...
- python接口自动化10-token登录
前言 有些登录不是用cookie来验证的,是用token参数来判断是否登录. token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已:另外一种是在url请求参数里,这 ...
- python接口自动化(二十)--token登录(详解)
简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮.有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录.token 传参有两种一种是放在请 ...
- python接口自动化10-token登录【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E ...
随机推荐
- 【iOS】那些年,遇到的小坑
'NSInvalidArgumentException', reason: '-[__NSPlaceholderDictionary initWithObjectsAndKeys:]: second ...
- 【洛谷P2574】XOR的艺术
XOR的艺术 题目链接 用线段树维护sum, 修改时 tag[p]^=1; sum=r-l+1-sum; 详见代码 #include<iostream> #include<cstdi ...
- SAC E#1 - 一道难题 Tree(树形DP)
题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...
- mysql数据库关于事务的问题?求解答
表格代码: CREATE TABLE `t_teacher` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `deposit` ) DEFA ...
- Co. - Microsoft - Windows - Tomcat、JDK、MySQL通过 Inno 集成为exe部署包
需求 客户设备为Windows系统,需要部署公司产品,因此将Tomcat.JDK.MySQL.Java.war 打包整合成exe文件,Windows下一键部署安装. 最佳实践 1.下载免安装的mysq ...
- navicat for MySQL连接本地数据库时报1045错误的解决方法
navicat for MySQL 连接本地数据库出现1045错误 如下图: 说明连接mysql时数据库密码错误,需要修改密码后才可解决问题: 解决步骤如下: 1.首先打开命令行:开始->运行- ...
- thinkphp发送邮箱(以thinkphp5作为示例)。
第一步:设置我们的邮箱客户端授权码 第二步:下载相应的第三方类库(我这里用的PHPemail) 这是phpemailde 第三方类库的文件下载地址:https://github.com/PHPMail ...
- [转]不让iTunes备份到c盘
很多人现在的C盘都是空间不大的SSD硬盘,ITUNES备份老是占越来越大的空间,不如动手把它改成其它盘好了.下面7个步骤教你转移备份. 1.需要一个小工具:Juction.exe,如果你已经是WIN7 ...
- node、npm安装教程
描述: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的使用包 ...
- python 连接MSSQL
# -*- coding: utf-8 -*- import pymssql conn=pymssql.connect(host=".",user="sa",p ...