Java 使用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

我正在尝试使用以下代码使用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.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);}