2010-11-27 95 views
6

我想使用HtmlUnit登錄到我的本地WordPress網站,但它似乎有一個餅乾問題。Java HtmlUnit - 無法登錄到wordpress

這是代碼的那begining:

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的拒絕:「[版本:0] [名稱: wordpress_2418eeb845ebfb96f6f1a71ab8c5625a] [值: +] [域名: localhost] [路徑:/ flowersWp/wp-admin] [過期:週五11月27 12:43:35 IST 2009]「。非法路徑屬性「/ flowersWp/wp-admin」。起源路徑: 「/flowersWp/wp-login.php」

回答

7

Web客戶端是使用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。

+0

感謝回答... – Ron 2010-12-07 09:22:28

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