美文网首页
电子科技大学信息门户模拟登录

电子科技大学信息门户模拟登录

作者: MrYun | 来源:发表于2018-01-25 01:08 被阅读1579次

    首先抓包或者按下F12进入浏览器开发者模式进行分析:


    2018-1-25(1).jpg

    由这张图我们可以得出我们填写完学号和密码后post的表单包含的内容有username,password,lt,execution,eventld,rmShown。而execution,_eventId,rmShown都是常量,分别为

    'execution': 'e1s1',
    '_eventId': 'submit',
    'rmShown': '1'
    

    而lt每次都是不同的一串字符串,查看源代码:

    2018-1-25(2).png
    这个lt实际上是登录的用户需要的流水号,相当于你起银行办理业务的时候,首先得拿到一个流水号排队表示你进入了办理整个业务的流程。而在这里,只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。
    而为了得到lt,我们可以通过BeautifulSoup库进行解析,在<input>标签下找到name='lt',并提取出value后的一串字符串即可。此外,在我们请求页面以获取lt值后,如果再用post发送我们构造好的表单,在这个过程中,相当于刷新了一下页面,,我们先前获得的lt值已经不再是现在的lt值了,所以这个时候我们就要用requests的session方法来保持cookie不变了,session方法可以让同一个实例发出的所有请求保持相同的cookie。
    代码如下:
    __author__=='YunLambert'
    import requests
    from http import cookiejar
    from bs4 import BeautifulSoup as bs
    
    header = {'User-Agent':...} #填写自己浏览器的请求头部信息即可
    loginurl = 'http://idas.uestc.edu.cn/authserver/login?service=http://portal.uestc.edu.cn/index.portal'
    
    def getLt(str):
        lt = bs(str, 'html.parser')
        dict = {}
        for i in lt.form.find_all('input'):
            if(i.get('name')) != None:
                dict[i.get('name')] = i.get('value')
        return dict
    
    print('****UESTC模拟登录*****')
    print('请输入学号:')
    username = input()
    print('请输入密码:')
    password = input()
    
    s = requests.Session()
    s.cookies = cookiejar.CookieJar()
    r = s.get(loginurl)
    dict = getLt(r.text)
    postdata={
        'username': username,#学号
        'password': password,#密码
        'lt': dict['lt'],
        'execution': 'e1s1',
        '_eventId': 'submit',
        'rmShown': '1'
    }
    response = s.post(loginurl, data = postdata, headers = header)
    print(response)
    #如果返回值为200,说明模拟登陆成功;404说明错误,登陆失败;500的话,可能是学校网又炸了....
    

    相关文章

      网友评论

          本文标题:电子科技大学信息门户模拟登录

          本文链接:https://www.haomeiwen.com/subject/trapaxtx.html