自从弄了个 lcd4linux 之后总想着弄点什么自动化的东西显示出来,因为最近从图书馆借了点书,于是首先想到的是抓图书馆的借阅信息。
我实现的思路大概来说就是,用脚本模仿正常登录查询的步骤来发出并处理请求:先用 Wireshark 对我请求的过程抓包(最方便的方式了吧),然后获取到整个过程中的 HTTP 请求,接着查看每个请求都用了什么方法、发了哪些字段,最后分析出必要的请求并模仿之,逐一发送出去,然后保存获取到的 HTML 页面内容并过滤出有用的内容。
这个操作,流程虽说简单但略微繁琐而且有需要注意的地方。我是用 curl 命令来模仿这些过程,当发送 POST 请求的时候,发送出去的数据是经过了 URL 编码的,里面所有的特殊字符全部都会变成 URL 编码格式的字符,但我忽略了这一点,导致服务器不能正确响应请求而只获取到了错误页面。
除了第一次请求之外,其他的请求都要保存 cookie 来保持会话的一致性。学校的图书馆系统是分开两个并布置在在不同的端口上的,但之间的会话一致性貌似只是通过普通的发送账号密码并 JS 模仿登录框操作来实现(我没详细测试,不知道两个系统之间是否有 session 转移的问题),要注意两个不同的服务器的端口号。
在对第二个系统进行数据的查询的时候,发现了一个问题。浏览器地址栏上面的地址并不是真实的页面地址,而是通过 JS 改写地址栏之后的地址。直接使用 curl 查询的话会得出一个 "Object has remove to here"的页面,里面那个 here 是个超链接,指向之处才是真正的页面的地址。请求了真实页面地址之后,JS 会复写浏览器的地址为原来用户点击的超链接的地址。不知道这用意何在,但如果只是为了隐藏真实页面地址的话我只能说这嫩得一逼啊……
关于如何用命令提取有用信息,我在下一个部分里再讲。
网友评论