BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #39496同步于 2015/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

爬北邮研究生选课系统

sun111
2015/3/26镜像同步13 回复
LZ在爬我邮电的研究生选课管理系统,但是在模拟登录的时候,遇到点问题,不知是表单提交错误还是因为验证码的问题,我始终不能登录成功。 package com.swd; import java.net.*; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.Scanner; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.cookie.*; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.jsoup.HttpStatusException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; class Search { static HttpClient httpClient = new HttpClient(); public static void log(String str) { try { PostMethod postMethod = new PostMethod(str); //httpClient.executeMethod(postMethod); //System.out.println(postMethod.getResponseBodyAsString()); /*postMethod.addRequestHeader("Accept","*"); postMethod.addRequestHeader("Accept-Encoding","gzip, deflate, sdch"); postMethod.addRequestHeader("Accept-Language","zh-CN,zh;q=0.8"); postMethod.addRequestHeader("Cache-Control","no-cache"); postMethod.addRequestHeader("Connection","keep-alive"); postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); postMethod.addRequestHeader("Host","yjxt.bupt.edu.cn"); postMethod.addRequestHeader("Origin","http://yjxt.bupt.edu.cn"); postMethod.addRequestHeader("Referer","http://yjxt.bupt.edu.cn/UserLogin.aspx?exit=1"); postMethod.addRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36"); postMethod.addRequestHeader("X-MicrosoftAjax","Delta=true"); postMethod.addRequestHeader("X-Requested-With","XMLHttpRequest");*/ NameValuePair postData[] = new NameValuePair[11]; postData[0] = new NameValuePair("ScriptManager1","UpdatePanel2|btLogin"); postData[1] = new NameValuePair("__EVENTTARGET","btLogin"); postData[2] = new NameValuePair("__EVENTARGUMENT",""); postData[3] = new NameValuePair("__LASTFOCUS",""); postData[4] = new NameValuePair("__VIEWSTATE","/wEPDwUJNzUwNTQ3ODM1D2QWAgIDD2QWBgIND2QWAmYPZBYCAgEPDxYCHghJbWFnZVVybAUqfi9QdWJsaWMvVmFsaWRhdGVDb2RlLmFzcHg/aW1hZ2U9NjMwMjIwOTM5ZGQCEQ9kFgJmD2QWAgIBDxBkZBYBZmQCFQ9kFgJmD2QWAgIBDw8WAh4LTmF2aWdhdGVVcmwFLX4vUHVibGljL0VtYWlsR2V0UGFzc3dkLmFzcHg/RUlEPVR1cjh2WnV1WGtzPWRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQ1WYWxpZGF0ZUltYWdlnfEPRX9gXdY96hiua/TqepvWHDQ="); postData[5] = new NameValuePair("__EVENTVALIDATION","/wEdAAmqLwDE/JrUmOQfTJ7BGHIIR1LBKX1P1xh290RQyTesRQa+ROBMEf7egV772v+RsRJUvPovksJgUuQnp+WD/+4LQKymBEaZgVw9rfDiAaM1olaVBPDcNy+Ywtjc8CoWgD64VJPLmjMIQbhcHEv9iR6nRyAL8ivCWv13xU5tvwydg7QZGpF9t2AMhbZ20iyvqtsNby5ctC4fKFyxhQzbAlldIXdK3g=="); postData[6] = new NameValuePair("UserName","***********"); postData[7] = new NameValuePair("PassWord","**********"); postData[8] = new NameValuePair("ValidateCode","4263"); postData[9] = new NameValuePair("drpLoginType","1"); postData[10] = new NameValuePair("__ASYNCPOST","true"); postMethod.setRequestBody(postData); int statusCode = httpClient.executeMethod(postMethod); System.out.println(statusCode); System.out.println(postMethod.getResponseHeaders()); } catch(IOException e) { e.printStackTrace(); } } } public class LoginTest { public static void main(String args[]) { Search s = new Search(); Search.log("http://yjxt.bupt.edu.cn"); } } 这个是主要的登录代码,求各位大神指导。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
shuian0930机器人#1 · 2015/3/27
验证码为啥是4263?每次请求登录页面的时候验证码一般都会变吧 【 在 sun111 (little sky) 的大作中提到: 】 : LZ在爬我邮电的研究生选课管理系统,但是在模拟登录的时候,遇到点问题,不知是表单提交错误还是因为验证码的问题,我始终不能登录成功。 : package com.swd; : import java.net.*; : ................... 通过『我邮2.0』发布
botieking机器人#2 · 2015/3/27
你首先得知道怎么析取验证码
Monologue机器人#3 · 2015/3/27
可以提取出验证码,然后用户输入,再发请求吧。
sun111机器人#4 · 2015/3/27
【 在 Monologue 的大作中提到: 】 : 可以提取出验证码,然后用户输入,再发请求吧。 我也是这么搞的,先将验证码下载到本地,然后再发请求,但是返回的头部是一堆乱码。。。
sun111机器人#5 · 2015/3/27
【 在 botieking 的大作中提到: 】 : 你首先得知道怎么析取验证码 我是将验证码先下载到本地,然后人工输入验证码
sun111机器人#6 · 2015/3/27
【 在 shuian0930 的大作中提到: 】 : 验证码为啥是4263?每次请求登录页面的时候验证码一般都会变吧 : : 通过『我邮2.0』发布 对,会变,这里我只是写代码的时候忘了改了,我是先将验证码下载到本地,然后人工输入验证码。
passerjing机器人#7 · 2015/3/27
不知楼主啥时候能够解决好了。慢慢来,别急
WTF机器人#8 · 2015/3/27
有验证码,你直接越过登录,人工登录,然后提取cookies,然后在程序中直接用cookies,然后就可以请求其他链接了。 比如这是我的cookies(当然去掉) ASP.NET_SessionId xxxxxxxxxxxxxxx LoginType LoginType=1
sun111机器人#9 · 2015/3/27
【 在 WTF 的大作中提到: 】 : 有验证码,你直接越过登录,人工登录,然后提取cookies,然后在程序中直接用cookies,然后就可以请求其他链接了。 : 比如这是我的cookies(当然去掉) : ASP.NET_SessionId xxxxxxxxxxxxxxx : ................... 真逗。。。我就是要实现模拟登录啊。。。你这样不直接没有模拟登录了吗?