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. c语言实现数组的转置

    #include<stdio.h> int main (){ int i,j,m,n; ][],b[][]; printf("请输入行列式的行数:\n"); scanf ...

  2. EF Ccore 主从配置 最简化

    业务需要 配置一主多从数据库 读写分离  orm用的ef core , 把思路和代码写下 1. 配置2个数据库上下文 ETMasterContext  ETSlaveContext(把增删改功能禁用掉 ...

  3. EntityFrameWork简单操作 EF数据上下文对象操作数据增删改差及批处理

    /// <summary> /// EF针对 留言数据库 的 数据上下文对象!!!! /// </summary> static LeaveWordBoradEntities ...

  4. 【洛谷P3205】[HNOI2010]CHORUS 合唱队

    合唱队 区间DP f[l][r][0/1]表示生成目标序列中的区间[l,r],最后一个数是a[l]/a[r] 的方案数 边界: f[i][i][0]=1 转移: f[l][r][0]=(a[l]< ...

  5. python序列化_json,pickle,shelve模块

    序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes 把内存数据 转成字符,叫序列化 把字符 转成内存数据,叫反序列化 模块 ...

  6. Kinect骨架数据

  7. 移动端判断微信浏览器安卓浏览器和ios浏览器

    $(function(){ var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf ...

  8. 课时15.DTD文档声明下(了解)

    W3C的官方网站是W3School,我们可以去官方网站查询DTD文档声明. HTML4.01       Strict  非常严谨的 如果你写了这个DTD文档声明,你就不能写如下样式: <fon ...

  9. Openresty最佳案例 | 第4篇:OpenResty常见的api

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616660 本文出自方志朋的博客 获取请求参数 vim /usr/example/exa ...

  10. iOS 崩溃日志分析(个人总结,最实用)

    iOS 崩溃日志分析(个人总结,最实用) 要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xco ...