【问题标题】:How to get httponly cookies from a Java client?如何从 Java 客户端获取 httponly cookie?
【发布时间】:2017-02-03 17:51:43
【问题描述】:

如何获取 httponly cookie?我应该使用什么工具 org.apache.http 或 jsoup,可能是 url 连接......请任何人给我例子。我尝试使用 jsoup 获取 cookie,但 jsoup 不返回 httponly cookie。 谢谢!!!

【问题讨论】:

  • 我们需要更多信息 - 你是如何做到这一点的?是 Tomcat 之类的 servlet 环境还是只是一个 java 程序。你有什么代码可以分享吗?
  • apache http 应该能够简单地读取Set-Cookie 标头。不知道 JSOUP 位它可能会做同样的事情。是不是HttpOnly,在浏览器之外基本上是无关紧要的。

标签: java http cookies


【解决方案1】:

您可以使用java.net.CookieHandler,引用于:Java Cookie Handling

直接取自http://www.hccp.org/java-net-cookie-how-to.html的例子:

从响应中检索 cookie:

向服务器打开一个java.net.URLConnection

URL myUrl = new URL("http://www.hccp.org/cookieTest.jsp");
URLConnection urlConn = myUrl.openConnection();
urlConn.connect();

循环通过响应标头寻找 cookie: 由于服务器可能在单个请求中设置多个 cookie,因此我们需要遍历响应标头,查找所有名为“Set-Cookie”的标头。

String headerName=null;
for (int i=1; (headerName = uc.getHeaderFieldKey(i))!=null; i++) {
    if (headerName.equals("Set-Cookie")) {                  
    String cookie = urlConn.getHeaderField(i);               
    ...                                                      

从 cookie 字符串中提取 cookie 名称和值: getHeaderField(int index) 方法返回的字符串是一系列用分号(;)分隔的name=value。第一个名称/值对是我们感兴趣的实际数据字符串(即“sessionId=0949eeee22222rtg”或“userId=igbrown”),随后的名称/值对是我们将用于管理 cookie 存储的元信息(到期时等)。

cookie = cookie.substring(0, cookie.indexOf(";"));
String cookieName = cookie.substring(0, cookie.indexOf("="));
String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length());

基本上就是这样。我们现在有了 cookie 名称 (cookieName) 和 cookie 值 (cookieValue)。

【讨论】:

  • 代码不起作用。 headerName 不等于“Set-Cookie”。但是 CookieHandler 确实有效!我在这里找到了例子link
【解决方案2】:

请大家举个例子

这是 Jsoup 的一个。

示例代码

Response response;
try {
    response = Jsoup //
            .connect("https://httpbin.org/cookies/set?http-only-cookie=test;%20httponly") //
            .ignoreContentType(true) //
            .execute();

    System.out.println(response.cookies());
} catch (IOException e) {
    throw new RuntimeException(e);
}

输出

{http-only-cookie="test\073 httponly"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 2014-01-23
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2019-11-26
    相关资源
    最近更新 更多