2012-12-08 95 views
0

我嘗試登錄到網站,並在使用java URLConnection登錄到網站後獲取頁面網站的頁面源。我面對的問題是我無法保持會話,所以服務器給了我這個警告,並且不讓我連接:如何在java URLConnection中維護會話?

該系統需要使用HTTP cookie來驗證授權信息。 我們的系統檢測到您的瀏覽器已禁用HTTP Cookie,或不支持它們。 有關如何正確配置瀏覽器以便與本系統配合使用的更多信息,請參閱瀏覽器中的「幫助」頁面。

起初我試圖發送空的cookie讓服務器理解我正在處理會話,但它不會給我會話ID。

這是我的源代碼:

try { 
     // Construct data 
     String data = URLEncoder.encode("usr", "UTF-8") + "=" + URLEncoder.encode("usr", "UTF-8"); 
     data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("pass", "UTF-8"); 

     // Send data 
     URL url = new URL("https://loginsite.com"); 
     URLConnection conn = url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestProperty("Cookie", "SESSID="); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data); 
     wr.flush(); 

     // Get the response 
     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String line; 
     while ((line = rd.readLine()) != null) { 
      System.out.println(line); 
     } 
     wr.close(); 
     rd.close(); 

     String headerName=null; 
     for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) { 
      if (headerName.equals("Set-Cookie")) { 
       String cookie = conn.getHeaderField(i); 
       System.out.println(cookie.split(";", 2)[0]); 
      } 
     } 
     } catch (Exception e) { 
    } 

回答

0

您應該使用它處理會話管理,併爲您的HTTP協議的其他細節,例如HTTP庫支持Cookies和開箱即用的Keep-Alive,Proxies等。嘗試Apache HttpComponents

+0

經過進一步研究,它會出現android實際上是推薦使用HttpUrlConnection,而不是HttpClient。 http://android-developers.blogspot.com/2011/09/androids-http-clients.html – snapplex