使用 Jsoup 進行更全面的身份驗證 POST 請求

大多數網站需要比上面演示的更復雜的過程。

登入網站的常用步驟如下:

  1. 從初始登入表單中獲取唯一的 cookie
  2. 檢查登入表單以檢視目標 URL 對於身份驗證請求的作用
  3. 解析登入表單以檢查需要與使用者名稱和密碼一起傳送的任何 security token
  4. 傳送請求。

下面是一個示例請求,將你登入到 GitHub 網站

// # Constants used in this example
final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"; 
final String LOGIN_FORM_URL = "https://github.com/login";  
final String LOGIN_ACTION_URL = "https://github.com/session";  
final String USERNAME = "yourUsername";  
final String PASSWORD = "yourPassword";  

// # Go to login page and grab cookies sent by server
Connection.Response loginForm = Jsoup.connect(LOGIN_FORM_URL)
                                     .method(Connection.Method.GET)
                                     .userAgent(USER_AGENT)
                                     .execute();  
Document loginDoc = loginForm.parse(); // this is the document containing response html
HashMap<String, String> cookies = new HashMap<>(loginForm.cookies()); // save the cookies to be passed on to next request  

// # Prepare login credentials 
String authToken = loginDoc.select("#login > form > div:nth-child(1) > input[type=\"hidden\"]:nth-child(2)")  
                           .first()  
                           .attr("value");  

HashMap<String, String> formData = new HashMap<>();
formData.put("commit", "Sign in");  
formData.put("utf8", "e2 9c 93");  
formData.put("login", USERNAME);  
formData.put("password", PASSWORD);  
formData.put("authenticity_token", authToken);  

// # Now send the form for login
Connection.Response homePage = Jsoup.connect(LOGIN_ACTION_URL)  
     .cookies(cookies)  
     .data(formData)  
     .method(Connection.Method.POST)  
     .userAgent(USER_AGENT)  
     .execute();

System.out.println(homePage.parse().html());