2011-05-25 51 views
3

我正在用Java編寫一些軟件。如何使用Java訪問/保存Cookie

我正在測試cookie管理功能,但我似乎無法使cookie工作。我寫了一個快速的PHP來刪除一個cookie,然後在我的瀏覽器中測試了這個cookie,並且cookie正常下載。

然而,看看這個代碼:

CookieManager cManager = new CookieManager(); 
    CookieHandler.setDefault(cManager); 
    try 
    { 

     URL url = new URL("http://localhost/_techfactory/apage.php"); 
     URLConnection connection = url.openConnection(); 
     CookieStore cookieJar = cManager.getCookieStore(); 
     List<HttpCookie> cookies = cookieJar.getCookies(); 
     for (HttpCookie cookie : cookies) 
     { 
      System.out.print(cookie); 
     } 
     Boolean isittrue = cookies.isEmpty(); 
     System.out.print(isittrue); 
     BufferedReader bin = new BufferedReader (new InputStreamReader(connection.getInputStream())); 
     String line; 
     while ((line = bin.readLine()) != null) 
     System.out.print(line); 

    } 
    catch (Exception e) 
    { 
     System.out.println(e); 
    } 

這雖然是語法正確,不輸出任何東西,除了從頁面的HTML。現在所有人都說,CookieManager的實現是CookieHandler,CookiePolicy和CookieStore的具體實現。然而,它只是拒絕爲我工作,我做錯了什麼?

回答

1

在檢查cookie存儲區之前,您需要閱讀HTTP標題字段,並且調用openConnection()不會讀取HTTP標題。請參閱the javadoc的前幾行。

如果您在處理過程中需要cookie,調用getInputStream()會連接並解析標題字段,就像URLConnection中的其他一些方法一樣。

+0

這是一個有趣的答案。但是,當我使用此代碼連接到遠程網站而不是「本地主機」時,Cookie似乎沒有問題。例如,我使用「http://www.google.co.uk」進行了測試。您認爲這對locahost無效的任何特定原因? Cookie接受政策? – anomalousmaterials 2011-05-26 01:45:11

+0

我沒有看到您所看到的 - 當我使用www.google.com試用您的代碼時,它不會顯示任何Cookie。如果我重新訂購代碼(閱讀內容,然後檢查cookies),它會顯示一個cookie。 – 2011-05-26 03:31:49

+0

你如何處理標題?我修改了一下代碼: 'code: URLConnection connection = url.openConnection(); connection.setDoInput(true); BufferedReader bin = new BufferedReader(new InputStreamReader(connection.getInputStream())); 絃線;' 它似乎工作:輸出可以在這裏找到:http://imageshack.us/photo/my-images/33/outputx.png/。 Google.com會丟棄幾個cookie?除非這不是cookies的真實輸出? – anomalousmaterials 2011-05-26 16:35:24