导语

前一段时间开发一款时间管理App《Todo》时,需要在首页的日历表上添加考试与图书归还的日期,涉及到学生教务处和图书馆的个人信息获取。虽然之前也做过类似的数据接口,但还是趁这个机会再此做个总结。

图书馆与教务处的登录类似,这里以模拟登录教务处为例。

正文

1、获取账号、密码的提交地址

网页登录的流程近乎都是:用户填写表单—>用户提交表单—>服务端判断账号与密码是否匹配—>返回结果。因此,要想模拟用户的登录,首先要知道用户将表单信息提交至何处。

我们在教务处的登录处查看源码,找到form表单对应的action地址。

action-url

在图中我们可以看到,action所指向的URL是http://59.77.226.32/logincheck.asp

2、有关 logincheck.asp 的请求

既然知道了表单提交的URL,那么进一步得,我们需要确认需要提交的数据有哪些,以及提交数据后的返回结果。

为方便查看HTTP请求,我在这里使用了FireFox的插件Toggle HttpFox

2.1 http://59.77.226.32/logincheck.asp 的HTTP请求

http://59.77.226.32/logincheck.asp提交表单后,得到HTTP请求信息如下:
logincheck-http-request

在这一请求过程中POST的数据:
logincheck-http-request-post-data

HTTP请求包括三部分:请求行(Request Line)、头部(Headers)和数据体(Body)。

我们对上图进行具体分析,顺便复习一下HTTP的请求格式:













































































































请求行 字段 字段含义 具体说明
Request-Line POST /logincheck.asp HTTP/1.1 HTTP请求行。由请求方法(method)、请求网址(Request-URI)和协议(Protocol)构成。格式:Method Request-URI Protocol 该请求请求方法为POST;请求网址:logincheck.asp协议:HTTP 1.1
头部
Host 59.77.226.32 对应网址URL中的Web名称和端口号
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0 客户浏览器名称
Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 浏览器或其他客户可以接受的MIME文件格式(可以根据此返回适当的文件格式)
Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 浏览器可接受的语言种类
Accept-Encoding gzip, deflate 浏览器可接受的编码方式
Referer http://jwch.fzu.edu.cn/ 产生请求的网页URL
Cookie ASPSESSIONIDQARDDQSQ=DHDPHHMCEAKPBCOJFPECGAEJ 向服务器发送的Cookie Cookie名称:ASPSESSIONIDSCTDCQSR;Cookie值:DHDPHHMCEAKPBCOJFPECGAEJ
Connection keep-alive 告知服务器是否可以维持固定的HTTP连接。(HTTP/1.1使用Keep-Alive为默认值) Keep-alive:保持连接
Content-Type application/x-www-form-urlencoded request的内容类型
Content-Length 47
数据体 字段 字段含义 具体说明 是否必须
muser 账号 即学生学号
passwd 密码 教务处密码
x 未知
y 未知

2.2 http://59.77.226.32/logincheck.asp 的HTTP响应

HTTP响应信息如下:
logincheck-http-response

HTTP响应由3个部分组成:协议状态版本代码描述、响应头(Response Header)和响应正文。

同样,我们也分析一下这一HTTP响应:




















































协议状态版本代码描述 字段 字段含义 具体说明
(Status-Line) HTTP/1.1 302 Object moved 协议状态代码描述 协议:HTTP 1.1;返回码:302(通过不同的URI请求资源的临时文件)
响应头
Cache-Control private 告知客户端如何控制相应内容缓存
Date Sat, 06 Feb 2016 06:37:34 GMT 响应日期、时间
Content-Length 189 实体正文长度
Content-Type text/html 指明发送给接收者的实体正文的媒体类型
Location http://59.77.226.35/loginchk_xs.aspx?id=201626143734214&num=4432 重定向接受者到一个新的位置 服务端告知客户端应访问 http://59.77.226.35/loginchk_xs.aspx?id=201626143734214&num=4432 来获取新的资源
响应正文

2.3 提取重要信息

在请求和响应的信息中,我们可以提取出几个关键信息:

  • 1、 必须提交的数据有

    muser: 账号

    password:密码

  • 2、 返回状态码为302

    这意味着我们要重定向到Location所指向的URL获取新的资源

3、有关重定向Location的请求

在向 http://59.77.226.32/logincheck.asp 请求后,我们得到了302状态码。

302重定向又称为302代表暂时性转移,需重定向到的网址在字段“Location”中给出,即 http://59.77.226.35/loginchk_xs.aspx?id=201626143734214&num=4432。

此处Http响应和请求的格式与上述相同,不再做具体分析。

3.1 HTTP请求信息:

302-http-request

3.2 HTTP返回信息:

302-http-response

3.3 提取重要信息

以上信息中,Cookie和向页面传输的id值十分重要(如上图红框标识),这两个字段都用于标识已登录用户。

4、举例:获取考场信息

用以上获取的Cookie和id值可以获取所有教务处的个人信息,例如课表、考场、成绩等。此处以获取考场为例。

登录教务处后,点击“我的考表”可查看个人考场信息。在HTTP查看工具中,我们可以看到,请求的地址是:http://59.77.226.35/student/xkjg/examination/exam_list.aspx?id=20162614373765992 。这里在url地址后用GET方式传递的id值就是3.2中获取的id值。

具体的HTTP请求信息如下:
exam-list-http-request

其中的idCookie都是我们在步骤3中看到的。

5、总结

总而言之,登录获取数据的关键在于Cookie和id值的获取,有了这两个值就能尽情地获取页面数据啦~

final-pic