从HTTP请求谈谈模拟登录教务处
导语
前一段时间开发一款时间管理App《Todo》时,需要在首页的日历表上添加考试与图书归还的日期,涉及到学生教务处和图书馆的个人信息获取。虽然之前也做过类似的数据接口,但还是趁这个机会再此做个总结。
图书馆与教务处的登录类似,这里以模拟登录教务处为例。
正文
1、获取账号、密码的提交地址
网页登录的流程近乎都是:用户填写表单—>用户提交表单—>服务端判断账号与密码是否匹配—>返回结果。因此,要想模拟用户的登录,首先要知道用户将表单信息提交至何处。
我们在教务处的登录处查看源码,找到form表单对应的action地址。
在图中我们可以看到,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请求信息如下:
在这一请求过程中POST的数据:
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响应信息如下:
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请求信息:
3.2 HTTP返回信息:
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请求信息如下:
其中的id和Cookie都是我们在步骤3中看到的。
5、总结
总而言之,登录获取数据的关键在于Cookie和id值的获取,有了这两个值就能尽情地获取页面数据啦~
- 本文链接:http://jalan.space/2016/02/05/2016-02-06-analog-login/
- 版权声明:本博客所有文章除特别声明外,均采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。
分享