免验证码模拟登陆获取token-云大urp教务系统大作战(2)

本文详细解析了URP系统的登录流程,并使用Python代码实现了自动化的登录过程,包括获取验证码、构造请求参数及发送POST请求等关键步骤。

通过真实世界看程序世界

这里我们需要注意到的是我们的代码应该模拟着真实urp系统的运作,将其步骤进行抽象化代码化。
我们采用f12 开发者控制台来查看urp的真实登录运作:

输入账号名密码验证码之后,交互情况

上图从上向下三个分布为

  1. 我们向urp的验证码接口信息接口请求了验证码的文件名。
  2. 我们向vimgs图片分发接口请求了刚才规定我们请求的验证码
  3. 我们向token验证接口post了我们提交的表单数据。
步骤一请求
步骤一返回值

步骤二请求值

可以看出上图步骤二中的最后图片文件名为步骤一返回值中的imgguid

步骤二返回的验证码图片
步骤三post请求

步骤三post请求携带的值

此处可看出提交的password字段:(密码|验证码图片真实值步骤一返回的tempid)*

总结一下具体的流程图:

总体流程.png

代码模拟:

分析好了真实流程我们只需要在代码里模拟一遍,并通过我们上一节中已经获取好的验证码表来进行登录。
模拟登录代码:

#!/usr/bin/env python
# coding:utf8
import sys
reload(sys)
sys.setdefaultencoding( "utf8" )
import json
import requests
from requests import exceptions

#1.The method to get accesstoken

def getToken(stucode,passwd):
    headers={'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'}
    URL = 'http://202.203.209.96/v5api/api/GetLoginCaptchaInfo/f525199d-9d7b-4547-9094-1528bed37496'
    URL2 = 'http://202.203.209.96/v5api/OAuth/Token'
    fr = open('../data/dict.txt','r')
    dic = dict()
    for line in fr:
        line = line.strip().split(',')
        dic[line[0]] = line[1]
    fr.close()
    response = requests.get(URL,headers=headers)
    imgguid  = response.json()['ImgGuid']
    caputre  = dic[imgguid]
    tempguid = response.json()['TempGuid']
    response2 = requests.post(URL2,headers=headers,data={'grant_type':'password','username':'%s'%(stucode),'password':'%s|%s*%s'%(passwd,caputre,tempguid),'client_id':'ynumisSite'})
    # print response2.request.headers
    print response2.status_code
    errorcode =set()
    if(response2.status_code !=200):
        errorcode.add(imgguid)
        fw = open('error.txt','a')
        fw.write(str(imgguid)+'\n')
        fw.close()
    jsonobj = json.loads(response2.text)
    token =jsonobj['access_token']
    return token
stucode = '学号'
passwd = '密码'
token = getToken(stucode,passwd)
拿到的token返回值
获取到token同时拿到的学生数据

token值相当于服务器识别我们的一张身份令牌,我们在网线的这头,服务器在网线的那头,服务器只会通过token来识别我们的身份存在。没有token,服务器永远不知道坐在电脑那端的是条狗还是个人。

没有token的小狗

下一节我们将通过获取到的token,实现成绩查询,选课,退课,一键评教等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值