我正在尝试使用HtmlUnit登录我当地的wordpress网站,但它似乎有一个cookie问题。
这就是代码的开头:
WebClient webClient = new WebClient();
HtmlPage loginPage = webClient.getPage("http://localhost/flowersWp/wp-admin");
HtmlForm form = loginPage.getFormByName("loginform");
这就是我在日志中得到的。有人有想法吗? 感谢。
2010年11月27日下午12:43:35 org.apache.http.client.protocol.ResponseProcessCookies processCookies 警告:Cookie被拒绝:“[version:0] [name: wordpress_2418eeb845ebfb96f6f1a71ab8c5625a] [value:+] [域名: localhost] [路径:/ flowersWp / wp-admin] [到期时间:11月27日星期五12:43:35 IST 2009]“。非法路径属性”/ flowersWp / wp-admin“。原产地: “/flowersWp/wp-login.php”
答案 0 :(得分:7)
WebClient正在使用apache httpclient,因此它是一个HttpClient问题。
根据我的经验,它与重定向有关。我已经使用HttpClient摆脱了这个问题,并注册了我自己的cookie支持:
// Create a local instance of cookie store
CookieStore cookieStore = new BasicCookieStore();
// Bind custom cookie store to the local context
httpclient.setCookieStore(cookieStore);
CookieSpecFactory csf = new CookieSpecFactory() {
public CookieSpec newInstance(HttpParams params) {
return new BrowserCompatSpec() {
@Override
public void validate(Cookie cookie, CookieOrigin origin)
throws MalformedCookieException {
// Oh, I am easy.
// Allow all cookies
log.debug("custom validate");
}
};
}
};
httpclient.getCookieSpecs().register("easy", csf);
httpclient.getParams().setParameter(
ClientPNames.COOKIE_POLICY, "easy");
好吧,在HtmlUnit中,我无法直接访问httpclient,但我正在考虑更改其源代码,因为我需要通过JavaScript支持连接到wordpress。
答案 1 :(得分:0)
我必须注意,在HttpClient 4+中,我必须执行以下操作:
CookieSpecProvider csf = new CookieSpecProvider() {
@Override
public CookieSpec create(HttpContext context)
{
return new BrowserCompatSpec() {
@Override
public void validate(Cookie cookie, CookieOrigin origin)
throws MalformedCookieException
{
// Allow all cookies
}
};
}
};
RequestConfig requestConfig = RequestConfig.custom()
.setCookieSpec("easy")
.build();
httpclient = HttpClients
.custom()
// .setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
.setDefaultCookieStore(cookieStore)
.setDefaultCookieSpecRegistry(RegistryBuilder.<CookieSpecProvider>create()
.register(CookieSpecs.BEST_MATCH, csf)
.register(CookieSpecs.BROWSER_COMPATIBILITY, csf)
.register("easy", csf).build())
.setDefaultRequestConfig(requestConfig)
// .setSSLSocketFactory(sslsf)
.build();