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)即可的更多相关文章

  1. python接口自动化(Cookie_绕过验证码登录)

     python接口自动化(Cookie_绕过验证码登录) 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以 ...

  2. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  3. python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功

    1.首先在excel中填写好预期结果的值 这里判断接口成功的依据是预期结果值是否存在于接口的返回数据中. 一般接口的返回值都是json对象,我们需要将json对象转换为json格式的字符串 如下图,进 ...

  4. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  5. python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  6. python接口自动化23-token参数关联登录(登录拉勾网)

    前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...

  7. python接口自动化10-token登录

    前言 有些登录不是用cookie来验证的,是用token参数来判断是否登录. token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已:另外一种是在url请求参数里,这 ...

  8. python接口自动化(二十)--token登录(详解)

    简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮.有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录.token 传参有两种一种是放在请 ...

  9. python接口自动化10-token登录【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E ...

随机推荐

  1. js CheckBox只读

    checkbox没有readOnly属性 所以我们要设置CHeckbox是只读的话就要设置其onclick方法并返回false checkbox.onclick=function(){return f ...

  2. 【luogu P3371 单源最短路径 】 模板 SPFA优化

    无优化:500ms deque优化:400ms #include <queue> #include <cstdio> #include <cstring> #inc ...

  3. 解决 Your project contains error(s),please fix them before running your applica ..

    解决 Your project contains error(s),please fix them before running your application问题 http://www.cnblo ...

  4. Question 20171116 StringBuffer和StringBuilder的扩容机制

    StringBuffer和StringBuilder都是继承自AbstractStringBuilder,它们两个的区别在于buffer是线程安全的,builder是线程不安全的,前者安全效率低,后者 ...

  5. 如何配置Java环境变量

    百度经验 | 百度知道 | 百度首页 | 登录 | 注册 新闻 网页 贴吧 知道 经验 音乐 图片 视频 地图 百科 文库 帮助   发布经验 首页 分类 任务 回享 商城 特色 知道 百度经验 &g ...

  6. Xshell中使用FTP/SFTP工具下载文件

    (1)sftp host_ip,输入用户名/密码 (2)通过cd命令找到远程服务器要拷贝的文件: 通过lcd命令指定本地保存地址. (3)通过get filename拷贝文件 (4)在本地查看,已经可 ...

  7. JavaScript 表单处理

    表单对象的属性 name action method encoding target elements 表单对象的方法 submit reset 表单元素事件 文本域事件:onFocus(获得焦点) ...

  8. 对象API

    遍历对象里的每个元素 var obj ={ a:32, b:12, c :342 } for (const key of obj){ if(obj.hasOwnProperty(key)){ cons ...

  9. Tomcat服务器的介绍、安装配置

    [1] Tomcat服务器的介绍 1.是一个免费的.开饭源代码的Servlet服务器,目前非常流行. 2.Tomcat服务器是Apache软件基金会的一个顶级项目,由Apache.Sun等公司共同开发 ...

  10. 转:java中的定时任务

    引自:http://www.cnblogs.com/wenbronk/p/6433178.html java中的定时任务, 使用java实现有3种方式: 1, 使用普通thread实现 @Test p ...