如何在 Java 中访问/保存 cookie

Posted

技术标签:

【中文标题】如何在 Java 中访问/保存 cookie【英文标题】:How to access / save cookies in Java 【发布时间】:2011-05-25 16:04:51 【问题描述】:

我正在用 Java 编写一些软件。

我正在测试 cookie 管理功能,但我似乎无法让 cookie 正常工作。我写了一个快速的 php 来删除一个 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 中的其他一些方法也是如此。

【讨论】:

这是一个有趣的答案。但是,当我使用此代码而不是“localhost”连接到远程网站时,cookie 似乎下降得很好。例如,我用“google.co.uk”对其进行了测试。您认为这在 locahost 上不起作用的任何特殊原因? Cookie 接受政策? 我看不到您所看到的内容——当我在 www.google.com 上尝试您的代码时,它没有显示任何 cookie。如果我重新排序代码(读取内容,然后检查 cookie),它会显示一个 cookie。 如何处理标题?我稍微修改了代码:code: URLConnection connection = url.openConnection(); connection.setDoInput(true); BufferedReader bin = new BufferedReader ( new InputStreamReader(connection.getInputStream())); String line; 它似乎有效:输出可以在这里找到:imageshack.us/photo/my-images/33/outputx.png。 Google.com 丢弃了几个 cookie?除非这不是 cookie 的真正输出?

以上是关于如何在 Java 中访问/保存 cookie的主要内容,如果未能解决你的问题,请参考以下文章

如果用于认证的JWT令牌保存在HTTP-Only cookie中,你如何从cookie中读取它,以便我可以在请求头中包含它?

如何保存cookie?望详细解释.

cookie是啥

如何在Chrome google浏览器中清除和管理Cookie

如果需要两个cookie发往客服端,需要的代码是

在哪里存储访问令牌以及如何跟踪用户(在 Http only cookie 中使用 JWT 令牌)