您的位置:首页 > 其它

12306模拟登录

2015-12-18 17:59 211 查看
在模拟12306登录及购票的时候,不要登录或者购票的次数测试频率太高,否则直接封IP。现在12306验证码的问题很复杂,我并不会破解,所以只能做需要带验证的模拟登录和购票。

在模拟的时候,在开发者工具栏中查看提交的get或者post数据。如果只是查看网络提交或者接收数据用Httpfox最好,他可以把全部的请求显示出来。用fixbug查看,发生了网页跳转的中间请求不能显示出来。现在来分析登录过程请求的先后顺序以及请求参数。

验证码的地址 https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand 后面还有一个随机数,这个随机数我没添加,也是可以请求的,不会报错,他只是为了防止缓存。

登录过程中的请求顺序



(1)第一个链接是检查验证码是否正确

第一个参数randCode是根据验证码图片来获取的。9张小图片,每张小图片都有一个像素范文。第一张就是需要选中图片的题目,后面8张就是需要选择的答案。我在做swing时,将验证码图片进行切割,将每张小图片按顺序放入9个JButton中,作为按钮的背景。选中哪些图片,则就会有相应的事件来执行,将对应的对象像素放入数组中,然后在登录的时候进行处理。图片效果如下:



登录前会先访问https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn ,判断验证码和参数是否正确。返回的结果为:{“validateMessagesShowId”:”_validatorMessage”,”status”:true,”httpstatus”:200,”data”:{“result”:”1”,”msg”:”TRUE”},”messages”:[],”validateMessages”:{}} ,如果有”msg”:”TRUE”,则验证码正确。

(2)进行登录,地址为https://kyfw.12306.cn/otn/login/loginAysnSuggest 参数为:



其中randCode是验证时候发送的验证码,采用post方法传递参数,键的名字一定要对,与表单中的大小写都要相同。返回数据:{“validateMessagesShowId”:”_validatorMessage”,”status”:true,”httpstatus”:200,”data{“otherMsg”:”“,”loginCheck”:”Y”},”messages”:[],”validateMessages”:{}} ,返回的json数据中有 “loginCheck”:”Y”,则登录信息正确。

(3)登录成功的最后一步,地址https://kyfw.12306.cn/otn/login/userLogin 。发送的数据较为简单:



值为空,不会有数据返回。

到此为止登录就分析完毕。总体来说登录还是很简单的,没有复杂的参数需要传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  12306