如何在 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中读取它,以便我可以在请求头中包含它?