liuyongqing1 发表于 2018-10-4 16:42

海淀驾校约车功能分析

本帖最后由 liuyongqing1 于 2018-10-6 15:33 编辑

海淀驾校APP约车分析
首先要在电脑上安装charles proxy或是fiddler,本人是mac,fiddler是没有mac版本的。所以选择使用charles proxy。
第一步:安装charles 软件,具体怎么安装网络上有我就不再说明。据说android是有抓包工具的。我手里没有android手机所以没办法测试。还是使用charles。
第二步:设置charles,把macos proxy 勾选上,然后点击proxy settings 设置proxy端口。

第三步:手机上的配置,IOS12点击设置-无线局域网--找到你连接的wifi(与电脑必须在同一个局域网下),点击!号翻到最下面,找到配置代{过}{滤}理并点击,界面选择手动,下面服务器输入电脑的IP地址,端口输入上面的8888,点右上角存储即可。
第四步:在手机上安装海淀驾校app。接下来就是分析步骤:1、输入手机号及密码点击登陆



2、看到charles请求,看到箭头的请求对应下面的是请求详细信息等,可以看到这个地址是post请求,传递了两个参数,passwordmd5和username,username对应手机号,passwordmd5对应的值是把密码用md5加密的。对应的python代码为md5password
PASSWORD='123456'#密码
md5password=hashlib.md5(PASSWORD).hexdigest()#加密后的密码

post成功后会返回学员的基本信息,这里敏感信息太多,所以修改了如下,#后面有注释该字段的意思:



{       "data":{"USERNAME":"1xxxxxxxxxx", #对应用户名
            "PHONENUM":"1xxxxxxxxxx",#对应手机密码
            "NICKNAME":"1235abc",   
         "ID":"123456", #id
            "XXZH":"12345678",#xxzh 不知道啥意思,学习证号? 但是该字段很重要需要记下
            "JGID":"123456",#不知道啥意思,需要记下
            "XYBH":"1234567890",#学院编号? 需要记下
            "SFZH":"xxxxxx",#身价证号
            "JXCODE":"xxxxxxxxx",#驾校code
            "APIURL":"",#无用字段
            "APIURLIOS":"https://haijiaapi.xuechebu.com:8007",
            "JXMC":"海淀驾校",
            "XM":"xxx",#姓名
            "USERTYPE":"",
            "DZ":"北京市",
            "SCHOOLPWD":"",#密码明文
             "SQCX":"",
            "SSBX":"",   
         "BACKGROUNDIMAGE":"",
             "HANDIMAGE":""       },
      "code":0,       "message":"签到签退等功能,仅限使用本人手机!使用别人手机登录,无法正常签到签退!",       "type":0
}






上面的一整条数据对应的代码为:
import requests,json
auth={'username':'1xxxxxxxxxx','passwordmd5':'xxxxxx'}
_headers={   'User-Agent':'android_haijia;v3.0.2;',   'Content-Type':'application/x-www-form-urlencoded',   'Host':'api.xuechebu.com',   'Connection':'Keep-Alive',   'Accept-Encoding':'gzip'}
r=requests.session()
login=r.post('http://api.xuechebu.com/usercenter/userinfo/login',data=auth,headers=_headers)
Data=json.loads(login.text)
XXZH=Data['data']['XXZH']
JGID =Data['data']['JGID']
XYBH=Data['data']['XYBH']




通过上面代码可以登陆成功,并把数据保存成变量供以后使用,以后代码都差不多,我就不再粘贴代码了。#注意header信息也要填上,不带header头的话可能不成功。特别是user-agent之类的。
上面请求的下一条url地址是:http://haijia.xuechebu.com:8008/Student/SetbadingStuInfo从SetbadingStuInfo这里可以看出是学生信息,就是上一条请求登陆成功后,会接着获取学员信息,我们看看请求主体及返回数据。


这步我记着是必须得请求的不管有没有用,应该是需要获取cookie。    接下来看约车请求。

点击我要约车。
可以看到请求的url是http://haijia.xuechebu.com:8008/KM2/ClYyTimeSectionUIQuery2


{         "data":{
                     "XnsdList":[{
                              "Xnsd":"2001",
                               "XnsdName":"08:00--11:30"
                     },{
                              "Xnsd":"2002",
                               "XnsdName":"12:30--16:00"
                     },{
                              "Xnsd":"2003",
                              "XnsdName":"16:30--20:00"
                     }],
                     "YyrqList":[{
                              "Yyrq":"2018/10/04 16:02:43",
                               "DisplayWeek":"周四",
                               "DisplayYyrq":"10-04"
                     },{
                              "Yyrq":"2018/10/05 16:02:43",
                              "DisplayWeek":"周五",
                               "DisplayYyrq":"10-05"
                     }],
                     "QsList":null,
                     "UIDatas":[{
                              "Yyrq":"2018/10/04 16:02:43",
                              "YyrqXH":0,
                              "Xnsd":"2001",
                              "XnsdName":null,
                               "QsName":null,
                              "Qsid":null,
                               "SL":1,
                              "KS":0,
                              "IsBpked":false,
                               "IsBpked_SK":0,
                              "IsCreate":true,
                               "YyClInfo":""
                  }
         "code":0,         "message":""}


可以看到2001代表上午2002代表中午下午   2003代表晚上。2001-2003提前定义好即可,他是不变的。下面SL代表余量,是需要过滤出来的,把有余量的日志过虑出来。例如下面就应该把yyrq有前半部分存下即2018/10/05

{
                               "Yyrq":"2018/10/05 16:02:43",
                               "YyrqXH":0,
                              "Xnsd":"2001",
                              "XnsdName":null,
                              "QsName":null,
                              "Qsid":null,
                              "SL":12,
                              "KS":0,
                               "IsBpked":false,
                               "IsBpked_SK":0,
                               "IsCreate":true,
                              "YyClInfo":""
}


确定好时间和时间段,即可以请求这个时间段内有多少名额了,即有多少车可以练。url地址为:http://haijia.xuechebu.com:8008/KM2/ClYyCars2

可以看到需要提交的参数时间段及预约日志还有学生编号。aaaa字段不用管我记得安卓没有这项。返回的数据是也如上,需要把CNBH取出来。 然后是提交确认信息了,下面的params就是时间日期加上cnbh,直接get即可。此时可以使用异步处理或是多进程。来提交成功率。提交的url地址是http://haijia.xuechebu.com:8008/KM2/ClYyCars2

好了我已经教大家方法。代码嘛我想了想,还是不发了。既然有思路代码肯定是不成问题的。码字不易,请大家多给点分吧。

liuyongqing1 发表于 2018-10-6 17:36

zn19951027 发表于 2018-10-6 16:52
我可以发给你 源代码 编译即可运行你可以发到论坛装个x 你说对不

好吧我自己也写了约车的。也看看你的吧哈哈。发我邮箱可以吗 ?yongq.liu@   qq.com

lgty623 发表于 2021-6-4 11:37

liuyongqing1 发表于 2018-10-6 17:36
好吧我自己也写了约车的。也看看你的吧哈哈。发我邮箱可以吗 ?yongq.liu@   qq.com

问下这个约车软件现在你还有?能不能发个源码参考下!422109590@QQ.COM

xiaowanzi52 发表于 2018-10-4 18:04

这家伙 代码看的我头疼呢

liuyongqing1 发表于 2018-10-4 18:12

xiaowanzi52 发表于 2018-10-4 18:04
这家伙 代码看的我头疼呢

有动力研究就不头疼了哈哈

w1223 发表于 2018-10-4 18:24

太复杂了完全看不懂,我还得多读几年书

大小方圆高矮 发表于 2018-10-4 21:07

学习学习

wygbio 发表于 2018-10-4 22:04

厉害厉害!!!

4everlove 发表于 2018-10-4 22:49

干嘛用的

xiaowanzi52 发表于 2018-10-5 08:30

可是我看不懂呢,然后你有什么用呢

sydn1234 发表于 2018-10-5 09:05


学习一下

liuyongqing1 发表于 2018-10-5 09:32

xiaowanzi52 发表于 2018-10-5 08:30
可是我看不懂呢,然后你有什么用呢

可以写程序去直接请求啊。这样提高约车成功率~
页: [1] 2 3 4
查看完整版本: 海淀驾校约车功能分析