我正在尝试使用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库之前希望得到一些建议。
答案 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从一个请求到下一个请求。