2016-08-04 115 views
1

我對以下用於認證大學校園網站的測試方法存在問題。 我正在使用Jsoup,我無法獲取cookie(jsessionid)登錄。 的方法是這樣的:如何使用jsoup設置jsessionid cookie?

public static void Authentication() { 

    String strURL = "https://www.studenti.ict.uniba.it/esse3/auth/Logon.do"; 
    String strUserId = "prova"; 
    String strPasword = "prova"; 

    String authString = strUserId + ":" + strPasword; 

    String encodedString = new String(Base64.encodeBase64(authString.getBytes())); 

    try{ 

     Response response = Jsoup.connect(strURL) 
       .header("Authorization", "Basic " + encodedString) 
       .method(org.jsoup.Connection.Method.GET) 
       .timeout(30000) 
       .execute(); 

     System.out.println(response.parse()); 

     System.out.println("Autenticato"); 

    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
} 

回答

1

您可以檢索該cookie創建另一個請求到網站的主頁。

package com.github.davidepastore.stackoverflow38768839; 

import java.io.IOException; 

import org.jsoup.Connection.Response; 
import org.jsoup.Jsoup; 

/** 
* Stackoverflow 38768839 answer. 
* 
*/ 
public class App { 

    private static final String COOKIE_NAME = "JSESSIONID"; 

    public static void main(String[] args) throws IOException { 
     // Step 1 - Get the cookie 
     String homeURL = "https://www.studenti.ict.uniba.it/esse3/Home.do"; 
     Response response = Jsoup.connect(homeURL).execute(); 
     String jsessionid = response.cookie(COOKIE_NAME); 
     System.out.println(COOKIE_NAME + " cookie: " + jsessionid); 

     // Step 2 - Try to login 
     String strURL = "https://www.studenti.ict.uniba.it/esse3/auth/Logon.do"; 
     String strUserId = "prova"; 
     String strPasword = "prova"; 

     String authString = strUserId + ":" + strPasword; 

     String encodedString = new String(Base64.encodeBase64(authString 
       .getBytes())); 

     try { 

      response = Jsoup.connect(strURL) 
        .header("Authorization", "Basic " + encodedString) 
        .cookie(COOKIE_NAME, jsessionid) 
        .method(org.jsoup.Connection.Method.GET).timeout(30000) 
        .execute(); 

      System.out.println(response.parse()); 

      System.out.println("Autenticato"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

謝謝。 cookie的幫助非常好。現在的問題是,它不會登錄並給我錯誤401,雖然訪問憑證是正確的。錯誤出現在「執行」功能中。 –

+0

@VincEnzo問題是,如果我沒有證書,我無法測試它。 –

+0

你可以給我發電子郵件嗎?你發送的登錄憑證 –