处理Java CookieManager“无效的cookie”错误

时间:2016-12-25 00:08:33

标签: java http cookies

我已定义CookieStore如下:

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager );
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);

每当我使用HttpURLConnection完成请求时:

URL url = new URL(MY_URL);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

我在输出中得到了这个:

java.net.CookieManager put SEVERE: Invalid cookie for https://...: ; HttpOnly

我该如何处理这条消息?

1 个答案:

答案 0 :(得分:1)

您需要首先确定抛出的异常类型。从查看CookieManger的文档:http://www.docjar.com/html/api/java/net/CookieManager.java.html

  283                       try {
  284                           cookies = HttpCookie.parse(headerValue);
  285                       } catch (IllegalArgumentException e) {
  286                           // Bogus header, make an empty list and log the error
  287                           cookies = java.util.Collections.EMPTY_LIST;
  288                           if (logger.isLoggable(PlatformLogger.SEVERE)) {
  289                               logger.severe("Invalid cookie for " + uri + ": " + headerValue);
  290                           }
  291                       }

问题似乎是您的请求标头不正确。可能想看一下,这里是示例代码的链接。

http://www.programcreek.com/java-api-examples/index.php?api=java.net.CookieManager

此外,您可能希望使用chrome调试器来查看发送的实际请求,通常它会为您提供有关请求失败原因的更多信息。请求可能不正确,您尝试将其发送到的URL可能无效,您发送请求的服务可能需要某些参数。

从代码中,它似乎在响应中查找标头。但是,响应本身要么没有包含头文件,要么它有问题,因此HttpCookie.parse会抛出错误。

如果您查看HttpCookies.parse,它会抛出异常:

抛出:

IllegalArgumentException - if header string violates the cookie specification's syntax, or the cookie name contains llegal characters, or the cookie name is one of the tokens reserved for use by the cookie protocol
NullPointerException - if the header string is null

因此,您需要查看响应并查看它们在标题中放置的数据是否正确。