2017-08-08 64 views
0

我試圖在Java中與Jsoup自動化SPOJ登錄,但響應頁面是不是我所期待,下面是代碼SPOJ登錄在Java中

public static void login() { 
    try { 
     Document doc; 
     Connection.Response response; 
     Map<String, String> cookies = new HashMap<>(), form = new HashMap<>(); 

     response = Jsoup.connect(LOGIN_URL) // http://spoj.com/login 
       .method(Connection.Method.GET) 
       .userAgent(USER_AGENT) 
       .execute(); 

     cookies.putAll(response.cookies()); 
     form.put("login_user", LOGIN_ACCOUNT); 
     form.put("password", LOGIN_PASSWORD); 
     form.put("next_raw", "/"); 

     response = Jsoup.connect(LOGIN_URL) 
       .cookies(cookies) 
       .method(Connection.Method.POST) 
       .data(form) 
       .userAgent(USER_AGENT) 
       .execute(); 

     System.out.println(response.body()); 
    } catch (IOException e) { 

    } 
} 

響應體結果仍包含登錄表單,這意味着我的登錄嘗試失敗。任何人都可以幫忙嗎?

回答

0

我已經通過檢索設定cookie的參數在報頭中的cookie的解決了這個問題,並與Apache客戶更改登錄實現

public static void login() { 
    try { 
     //Submit Login Form 
     HttpResponse response = Request.Post(LOGIN_URL) 
       .bodyForm(Form.form() 
         .add("login_user", ACCOUNT) 
         .add("password", PASSWORD) 
         .add("next_raw", "/") 
         .add("autologin", "1") 
         .build()) 
       .userAgent(USER_AGENT) 
       .execute() 
       .returnResponse(); 

     //Retrieve Cookie from Response 
     StringBuilder sb = new StringBuilder(); 
     for(Header header : response.getAllHeaders()) { 
      if(header.getName().equalsIgnoreCase("set-cookie") || header.getName().equalsIgnoreCase("set-cookie2")){ 
       sb.append(header.getValue()).append("; "); 
      } 
     } 
     COOKIE = sb.toString(); 

     //Debugging to Verify if Login is Successful 
     Document doc = Jsoup.connect(BASE_URL).cookies(cookieMapper()).get(); 
     System.out.println(doc.text()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}