2014-04-10 94 views
0

所以,我有我想訪問的這個網頁,但首先我必須從另一個網頁登錄。我想保留cookie,然後將其用於以後的自動登錄。到目前爲止,我所做的:如何登錄並保存cookie以便以後使用網頁

首先,這是登錄網頁:https://autenticacao.uvanet.br/autenticacao/pages/login.jsf

這是我大學的學生的區域。

public class Consulta extends AsyncTask<String, Void, String> { 

@Override 
protected String doInBackground(String... urls) { 
    StringBuilder builder = new StringBuilder(100000); 

    DefaultHttpClient client = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(urls[0]); 
    try { 
     List<NameValuePair> val = new ArrayList<NameValuePair>(2); 
     val.add(new BasicNameValuePair("form:usuario", "myusername")); 
     val.add(new BasicNameValuePair("form:senha", "mypass")); 
     httpPost.setEntity(new UrlEncodedFormEntity(val)); 


     HttpResponse response = client.execute(httpPost); 

     InputStream content = response.getEntity().getContent(); 

     BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
     String s = ""; 

     while ((s = buffer.readLine()) != null) { 
      builder.append(s); 
     } 

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


    return builder.toString(); 
} 

}

這是我使用,使類HttpPost,這是我怎麼稱呼它:

@Override 
       public void onClick(View v) { 
        try{ 
         String html = new Consulta().execute("https://autenticacao.uvanet.br/autenticacao/pages/login.jsf").get(); 
         Document doc = Jsoup.parse(html); 
         Element link = doc.select("title").first(); 
         String t = link.text(); 
         tv1.setText(t); 
        }catch(Exception e){ 
         e.printStackTrace(); 
        } 
       } 

我相信它會以這種方式工作:

  1. 我發送該網頁登錄Consulta.java
  2. 該類將獲得域「的形式:usuario」和「形式:senha」,並與名爲myUsername,輸入mypassword填充它們,然後登錄
  3. 類將返回我的HTML代碼的第二網頁,作爲字符串

但是,什麼情況是,它返回我第一個網頁(登錄一)。我很確定我做錯了什麼,但我不知道是什麼,有人能幫助我嗎?另外,對不起我的英語,這不是我的主要語言。

回答

0

當你做登錄(在https://autenticacao.uvanet.br/autenticacao/pages/login.jsf),我不認爲這個響應是第二個網頁的html代碼。你確定嗎?

我認爲登錄頁面的正常行爲是使用同一頁面(登錄頁面)進行響應,但添加會話cookie和頁眉以重定向到第二個網頁,而不是第二個頁面本身。 在這種情況下,您必須閱讀http標題響應才能提取這些參數:cookie和第二個網頁的URL。

使用對象的HttpResponse:

Header[] h = response.getAllHeaders(); 

但我建議你使用HttpURLConnection類類,而不是DefaultHttpClient。

相關問題