验证码:
(1)发现12306的验证下载链接有两个,还会换,分别是:
1. https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.478012180178432
2. https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.8662127058743592
我最开始写的时候用的是1,后来发现1下载失败变成2了,现在又变成1了,但2还能用;先按1写吧。
(2)流程:
第一步(GET): https://kyfw.12306.cn/otn/login/init 此处开始设置Cookie,以下所以Cookie保持一致
第二步(GET):https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.478012180178432 最后为随机数可不传,要传也就两行代码如下:
Random random = new Random();
double randomValue = random.NextDouble();
第三步(POST):https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn 参数为:"randCode=33,37&rand=sjrand",randCode为验证码中正确图片坐标,rand为固定值;第一行字的高度为30px,每格小图片大概是70*70,返回结果为json,格式为:{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"result":"0","msg":"FALSE"},"messages":[],"validateMessages":{}}
"data":{"result":"1","msg":"TRUE"}时为成功。
第四步(POST):https://kyfw.12306.cn/otn/login/loginAysnSuggest 参数为:loginUserDTO.user_name={0}&userDTO.password={1}&randCode={2},其中randCode和上一步一样;返回的也是json,格式为:
{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"otherMsg":"","loginCheck":"Y"},"messages":[],"validateMessages":{}}
以上就是验证码及登录的整个流程。
效果如下: