返回信息流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");
}
}
这个是主要的登录代码,求各位大神指导。。。
这是一条镜像帖。来源:北邮人论坛 / java / #39496同步于 2015/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
爬北邮研究生选课系统
sun111
2015/3/26镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
验证码为啥是4263?每次请求登录页面的时候验证码一般都会变吧
【 在 sun111 (little sky) 的大作中提到: 】
: LZ在爬我邮电的研究生选课管理系统,但是在模拟登录的时候,遇到点问题,不知是表单提交错误还是因为验证码的问题,我始终不能登录成功。
: package com.swd;
: import java.net.*;
: ...................
通过『我邮2.0』发布
【 在 Monologue 的大作中提到: 】
: 可以提取出验证码,然后用户输入,再发请求吧。
我也是这么搞的,先将验证码下载到本地,然后再发请求,但是返回的头部是一堆乱码。。。
【 在 shuian0930 的大作中提到: 】
: 验证码为啥是4263?每次请求登录页面的时候验证码一般都会变吧
:
: 通过『我邮2.0』发布
对,会变,这里我只是写代码的时候忘了改了,我是先将验证码下载到本地,然后人工输入验证码。
有验证码,你直接越过登录,人工登录,然后提取cookies,然后在程序中直接用cookies,然后就可以请求其他链接了。
比如这是我的cookies(当然去掉)
ASP.NET_SessionId xxxxxxxxxxxxxxx
LoginType LoginType=1
【 在 WTF 的大作中提到: 】
: 有验证码,你直接越过登录,人工登录,然后提取cookies,然后在程序中直接用cookies,然后就可以请求其他链接了。
: 比如这是我的cookies(当然去掉)
: ASP.NET_SessionId xxxxxxxxxxxxxxx
: ...................
真逗。。。我就是要实现模拟登录啊。。。你这样不直接没有模拟登录了吗?