2016-08-04 144 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

你可以给我发电子邮件吗?你发送的登录凭证 –