Java 使用jsoup登录网站
我正在尝试使用以下代码使用jsoup登录我的大学网站:Java 使用jsoup登录网站,java,networking,jsoup,Java,Networking,Jsoup,我正在尝试使用以下代码使用jsoup登录我的大学网站: public class captcha { public Map cookies; private String regno = "####"; //my regno private String passwd = "####"; //my pass public HashMap<String,String> downloadCaptcha()throws Exception { Connection.Res
public class captcha {
public Map cookies;
private String regno = "####"; //my regno
private String passwd = "####"; //my pass
public HashMap<String,String> downloadCaptcha()throws Exception {
Connection.Response response = Jsoup.connect("https://academicscc.vit.ac.in/student/stud_login.asp")
.timeout(300000)
.userAgent("Mozilla/5.0")
.method(Connection.Method.GET).execute();
cookies = response.cookies();
Document doc = response.parse();
Elements fields = doc.select("form input");
HashMap<String,String> formFields = new HashMap<String, String>();
for (Element field : fields ){
formFields.put(field.attr("name"), field.attr("value"));
}
Connection.Response resultImageResponse = Jsoup.connect("https://academicscc.vit.ac.in/student/captcha.asp")
.cookies(cookies)
.ignoreContentType(true)
.method(Connection.Method.GET).timeout(30000).execute();
cookies.putAll(resultImageResponse.cookies());
FileOutputStream out = (new FileOutputStream(new java.io.File("abc.jpg")));
out.write(resultImageResponse.bodyAsBytes());
out.close();
System.out.println("Captcha Fetched");
//formFields.remove("message");
formFields.values().remove("Forgot Password ?");
System.out.println(formFields);
return formFields;
}
public void getData(HashMap<String, String> formFields) throws Exception{
Connection conn = Jsoup.connect("https://academicscc.vit.ac.in/student/stud_login.asp")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0")
.cookies(cookies)
.timeout(0)
.data(formFields)
.method(Connection.Method.POST);
Connection.Response response = conn.execute();
cookies = response.cookies();
System.out.println(response.cookies());
Document doc= response.parse();
FileWriter fr = new FileWriter("response.html");
PrintWriter pw= new PrintWriter(fr);
pw.println(doc.toString());
System.out.println(doc.toString());
pw.close();
fr.close();
}
private void run() throws Exception, IOException {
HashMap<String, String> formFields = downloadCaptcha();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String vrfcd = br.readLine();
formFields.put("regno", regno);
formFields.put("passwd", passwd);
formFields.put("vrfcd", vrfcd);
System.out.println(formFields);
getData(formFields);
}
public static void main(String[] args) throws Exception {
captcha main = new captcha();
main.run();
}
}
而代码输出的请求cookies为
{logstudregno=, ASPSESSIONIDSGASBSQA=JODNGAHAIIGMCJALLNMOHKMG}
经过几天的头痛,我终于解决了。原来我只是没有使用正确的url发布。我登录了Chrome,找到了实际的url。现在它工作了:)
public void getData(HashMap formFields)引发异常{
连接conn=Jsoup.connect(“https://academicscc.vit.ac.in/student/stud_login_submit.asp")
.userAgent(“Mozilla/5.0(Windows NT 6.1;WOW64;rv:35.0)Gecko/20100101 Firefox/35.0”)
.饼干(饼干)
.超时(0)
.数据(表单字段)
.method(Connection.method.POST);}
我仍然很想知道为什么我使用Chrome获得了更多的cookies。您还有一个被忽略的名为“message”的字段。我在登录时检查了Chrome中的网络活动,并获得了表单数据。message:regno:#########################(我的通行证)vrfcd:FRH6B7,正如您可以看到的消息字段为空。这并不意味着您可以忽略它。那么我该如何?早些时候,我从formField中删除了它,但我将该行注释掉了。另外编辑:代码包括println(Response.cookies()),其输出为logstudregno=(null)。在chrome上,我检查了cookies,结果是logstudregno=####(我的注册号)
{logstudregno=, ASPSESSIONIDSGASBSQA=JODNGAHAIIGMCJALLNMOHKMG}
public void getData(HashMap<String, String> formFields) throws Exception{
Connection conn = Jsoup.connect("https://academicscc.vit.ac.in/student/stud_login_submit.asp")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0")
.cookies(cookies)
.timeout(0)
.data(formFields)
.method(Connection.Method.POST);}