Java HtmlUnit - не удается войти в WordPress - PullRequest
6 голосов
/ 27 ноября 2010

Я пытаюсь использовать HtmlUnit для входа на мой локальный веб-сайт WordPress, но, похоже, проблема с файлами cookie.

Это начало кода:

WebClient webClient = new WebClient();
HtmlPage loginPage = webClient.getPage("http://localhost/flowersWp/wp-admin");
HtmlForm form = loginPage.getFormByName("loginform");

Вот что я получаю в журнале. У кого-нибудь есть идея? Спасибо.

27 ноября 2010 г. 12:43:35 org.apache.http.client.protocol.ResponseProcessCookies processCookies ВНИМАНИЕ: Файл cookie отклонен: "[версия: 0] [имя: wordpress_2418eeb845ebfb96f6f1a71ab8c5625a] [значение: +] [домен: localhost] [путь: / flowersWp / wp-admin] [срок действия: пт 27 ноября 12:43:35 IST 2009] ". Недопустимый атрибут пути" / flowersWp / wp-admin ". Путь происхождения: «/flowersWp/wp-login.php"

Ответы [ 2 ]

7 голосов
/ 06 декабря 2010

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, но я думаю об изменении его исходного кода, чтобы сделатьИтак, мне нужно подключиться к WordPress с поддержкой JavaScript.

0 голосов
/ 12 января 2015

Я должен отметить, что в 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();
...