首先说下我的思路,不知道正确不正确……(因为我刚接触这一方面,有什么逗的地方 还请大家多多见谅,谢了)
1.通过get请求获取到一个验证码图片,并记录LoginBeforeCookie.
[C#] 纯文本查看 复制代码
public Image getcodeimg()
{
http = new HttpHelper();
item = new HttpItem()
{
URL = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand",//URL 必需项
Method = "get",//URL 可选项 默认为Get
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
ContentType = "application/x-www-form-urlencoded",//返回类型 可选项有默认值
ResultType = ResultType.Byte
};
HttpResult result = http.GetHtml(item);
LoginBeforeCookie= result.Cookie;
Image code = byteArrayToImage(result.ResultByte);
return code;
}
2.通过Post请求将账号和密码以及验证码传入进去(当然Cookie也会带上)。
[C#] 纯文本查看 复制代码
public string Login(string user, string pwd, string randcode)
{
http = new HttpHelper();
item = new HttpItem()
{
URL = "https://kyfw.12306.cn/otn/login/loginAysnSuggest",//URL 必需项
Method = "post",//URL 可选项 默认为Get
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
Cookie = LoginBeforeCookie,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
ContentType = "application/x-www-form-urlencoded",//返回类型 可选项有默认值
Postdata = "loginUserDTO.user_name="+user+"&userDTO.password=“+pwd+”&randCode=" + randcode + ""
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
return html;
}
可是结果一般是两种情况:
一:验证码错误。{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{},"messages":["验证码错误"],"validateMessages":{}}(验证码肯定是填写的图片的内容,这个不会手抖,我自己代码一般爆这个错)
二:网络忙,请刷新重试!{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{},"messages":["网络忙,请刷新重试!"],"validateMessages":{}}(苏飞开发助手一般爆这个错)
求指导思路!!!!! |