2014-10-19 95 views
2

我试图模拟一个使用HtmlUnit 2.15的场景,其中cookie将被保存在前一个会话中,并且应该在新会话中请求页面时发送给服务器。 下面是该代码...HtmlUnit CookieManager不向第一个请求发送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”。同时通过代理(fiddler)验证请求我发现在首次请求时,web客户端没有发送Cookie头文件。

有没有人通过这个?希望在进入调试HtmlUnit库之前提供一些建议。

回答

0

使用this answer(基本上是自己构建的WebRequest,手动添加饼干,然后将它传递给WebClient的),因为它可能是您的设置(例如使用弹簧试验/ WebMVC用的HtmlUnit)不“通过“从一个请求到下一个请求。