6

HtmlUnitを使用してローカルのワードプレスWebサイトにログインしようとしていますが、Cookieの問題があるようです。

これがコードの始まりです。

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

それが私がログに記録するものです。誰かアイデアがありますか?ありがとう。

2010年11月27日12:43:35PMorg.apache.http.client.protocol.ResponseProcessCookies processCookies警告:Cookieが拒否されました: "[バージョン:0] [名前:wordpress_2418eeb845ebfb96f6f1a71ab8c5625a] [値:+] [ドメイン:localhost][パス:/週-flowersWp / wp-admin] [有効期限:金11月27日12:43:35IST2009]」。パス属性「/flowersWp/wp-admin」が無効です。発信元のパス: "/flowersWp/wp-login.php"

4

2 に答える 2

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 に接続する必要があるため、そのソース コードを変更することを考えています。

于 2010-12-06T08:04:58.023 に答える
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();
于 2015-01-12T13:21:52.290 に答える