以前在新浪博客有写过一些技术文章,既然现在搭建了自己的个人技术博客,就把原来写的文章,一些原创的,不是零散的迁移到这里来。
这篇文章写于 2015-10-28 10:07
正文
老婆要参加一次考试,但是考试名额已经满了,预期最近会有人退考,所以按老婆要求我写了一个程序间隔5分钟去请求一次,看看是否能报上名。
程序的逻辑还是比较简单的,写个 while 循环去请求报名的最后一步, 根据返回的应答页面,解析页面中的是否出现了预期的汉字,然后判断结果,如果失败了,那么等5分钟后再请求一次。
解决思路
首先当然是实际操作下网站报名页面了,报名流程大致有3步:
第一步选择考区,第二步选择考试科目,提交后显示结果页面告知是成功还是失败。先操作到第二步,然后开启Fiddler2来抓取请求包。
之后点击第三步,就可以通过Filddler2来查看请求时的参数以及Cookie,因为session就存放在http header的Cookie中。知道这些信息后就可以通过httpclient来模拟请求了。当然有一些条件:浏览器要开着,不要关闭;如果像我一样,晚上带电脑回家,那么Cookie中存放的session值会改变,所以需要重新用Fiddler2来再抓取一次。
代码逻辑
主体代码如下:
cookieValue中的值以”Cookie:”开头,后面跟实际的值,可以有多个,用分号(;)分隔。例如:
Cookie: SessionId=evsxrcuupj502r45yvktcwqg; USR_ID=DC8E2AD0
然后就是判断返回的结果了,根据之前手动的操作,如果失败,那么会返回”报名失败”的关键字,所以根据返回的string,判断是否有这个关键字,如果有,那么认为报名失败,等待下一次请求,如果没有,那么认为报名成功了。
后来担心session丢失,所以在返回的结果中还添加了判断,判断是否出现了老婆的名字,出现了,那么说明session未丢失。
等待5分钟的实现使用 Thread.sleep(300000); 就可以了。
如何提示成功了呢?
剩下的问题是如果成功了怎么通知呢?无法像实际项目中可以通过发邮件,发短信,发微信来提醒,没有这个条件。
所以后来想到如果成功了,那就播放一个mp3文件,放首歌来提醒吧。网上找了很久JAVA播放mp3文件的例子,最后终于找到一个可以使用而且简单的代码了。
代码实现如下:
fileName就是mp3文件的路径,到时候通过构造函数的参数传入就可以了。
上述代码需要使用到 java播放MP3格式的spi,有以下几个包:
jlayer-1.0.jar, mp3spi-1.9.4.jar, tritonus_share-1.0.jar
可以从 http://down.51cto.com/data/840489 获得。
结果
最后的结果是头天晚上写的程序,第二天白天大概跑了103次都还是报名失败,但是等到晚上运行到第3次后,期待的音乐开始播放了。
报名成功了!我和老婆都很激动,我也很有成就感。
这大概就是喜欢做程序员的原因吧。大棒了,生活太美好了!