HtmlUnit CookieManager不会在第一次请求时发送cookie

时间:2014-10-19 05:07:02

标签: java cookies webclient htmlunit

我正在尝试使用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。同时通过代理(fiddler)验证请求我发现webclient在第一次请求时没有发送Cookie头。

有没有人经历过这个?在进入调试HtmlUnit库之前希望得到一些建议。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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