Java HtmlUnit - 无法登录到wordpress

时间:2010-11-27 10:51:47

标签: htmlunit apache-httpclient-4.x

我正在尝试使用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”

2 个答案:

答案 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();