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 ...
随机推荐
- js和.net操作Cookie遇到的问题
Cookie初探1.我理解中的Cookie1.1.Cookie存储位置是客户端的1.2.Cookie存储数据,数据大小也是有限制的 2.Cookie的用法2.1.js对Cookie的操作(网上很多我就 ...
- 【洛谷P2657】[SCOI2009] windy数
最近学习了一下数位DP 感觉记忆化搜索是比较好理解的 这篇博客对我有一定的启发https://www.cnblogs.com/zbtrs/p/6106783.html 总结了一下: 用数位DP的 ...
- struts2 实现文件下载方法汇总
http://pengranxiang.iteye.com/blog/259401 一.通过struts2提供的下载机制下载文件: 项目名为 struts2hello ,所使用的开发环境是MyEcli ...
- python 并发编程之协程
一.协程 协程: 单线程下的并发,又称 微线程.协程是一种用户态的的轻量级线程,即协程是由用户程序自己控制调度的. 协程的本质就是在单线程下,由用户自己控制一个任务,遇到 io 阻塞就切换另外一个 ...
- LINQ to XML简介
我们的配置文件使用XML存储信息.ADO.NET的DataSet(利用扩展方法)可以方便的将数据保存(或加载)为XML..NET特有的XML API,如XmlReader/XmlWriter类.微端提 ...
- [Linux]文件浏览
1.使用file命令查看文件中数据的类型 [oracle@linuxforlijiaman Desktop]$ ls linux oracle.txt test.png [oracle@linuxfo ...
- aes 加密,解密(2)
JavaScript加密,解密 1,此为AES加密后,转换为16进制编码 var encodePwd = function (data,key){ var keyHex = CryptoJS.enc. ...
- Python实现爬虫从网络上下载文档
最近在学习Python,自然接触到了爬虫,写了一个小型爬虫软件,从初始Url解析网页,使用正则获取待爬取链接,使用beautifulsoup解析获取文本,使用自己写的输出器可以将文本输出保存,具体代码 ...
- Git推送到远程分支出错
执行git push -u origin master fatal: 'git@github.com:qilinonline/git_test.git' does not appear to be a ...
- mysql 优化like查询
1. like %keyword 索引失效,使用全表扫描.但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描. 2. like keyword% 索引有 ...