我使用以下命令向站点发出HTTP请求:

//首次调用服务器时执行

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


以下是实际的调用

            BufferedReader reader = null;
            HttpURLConnection conn = null;

            URL url = new URL(urlString);
            conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000);
            conn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0");

//I added these 2 lines as a trial to fix this problem but failed
            cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
            CookieHandler.setDefault(cookieManager);

            conn.connect();
            InputStream in = conn.getInputStream();
...


上面的代码在一段时间内效果很好,但在某些时候(确切地不知道多少时间),我得到的响应是我的cookie被禁用,我应该启用它们。重新启动服务器会使它再次工作,直到再次发生,依此类推...

cookieManager和cookieHandler在某个时候到期?
我想念什么吗?
谢谢

最佳答案

您无法在CookieManager级别上进行控制,而只能在Cookie本身内进行控制。 HttpCookie具有setMaxAge(long expiry)设置cookie的最长生存时间(以秒为单位)。

正如您在HttpCookie的源代码(MAX_AGE_UNSPECIFIED)和getMaxAge()方法文档中看到的那样,默认值设置为-1


  默认情况下,-1表示cookie将一直保留到浏览器关闭为止。


setMaxAge(long expiry)指出以下内容:


  负值表示cookie不会持久存储,并且在Web浏览器退出时将被删除。

关于java - Java CookieManager或CookieHandler到期?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50445678/

10-10 09:12