2011-05-25 90 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