【问题标题】:HtmlUnit CookieManager not sending cookies with the first requestHtmlUnit CookieManager 没有在第一个请求中发送 cookie
【发布时间】:2014-12-14 08:44:59
【问题描述】:

我正在尝试使用 HtmlUnit 2.15 模拟一个场景,其中 cookie 将在前一个会话中保存,并且应该在新会话中请求页面时发送到服务器。 这是那个的代码...

    String url = "http://localhost:55545/";
    String domain = "localhost:55545";

    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);

    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
    CookieManager cookieManager = webClient.getCookieManager();
    cookieManager.setCookiesEnabled(true);

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.HOUR, 1);
    Cookie cookie = new Cookie(domain, "cName", "cValue", "/", cal.getTime(), false);

    cookieManager.addCookie(cookie);
    webClient.setCookieManager(cookieManager);

    HtmlPage page = null;
    try {
        page = webClient.getPage(url);
    } catch (FailingHttpStatusCodeException e) {
        System.err.print(e.toString());
        return;
    } catch (MalformedURLException e) {
        System.err.print(e.toString());
        return;
    } catch (IOException e) {
        System.err.print(e.toString());
        return;
    }

预期的行为是我应该在服务器上接收到 cookie “cName”,但是那里没有接收到 cookie。还通过代理(提琴手)验证请求我看到在第一个请求时 webclient 没有发送任何 Cookie 标头。

有人经历过吗?希望在我开始调试 HtmlUnit 库之前得到一些建议。

【问题讨论】:

    标签: java cookies webclient htmlunit


    【解决方案1】:

    使用this answer(基本上是自己构建WebRequest,手动添加Cookie,然后将其传递给WebClient),因为它可能是您的设置(例如将 Spring Test / WebMVC 与 HtmlUnit 一起使用)不会将 Cookie 从一个请求“传递”到下一个请求。

    【讨论】:

      【解决方案2】:

      根据https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies 在限制 cookie 的范围时,不考虑域中的端口(主机名)。 从域中删除端口就可以了。

      【讨论】:

        猜你喜欢
        • 2015-11-06
        • 2012-10-08
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 2015-07-27
        • 1970-01-01
        相关资源
        最近更新 更多