如何使用Web客户端获取经过数据身份验证的页面

时间:2012-06-23 08:42:07

标签: java httpclient webclient httpurlconnection

我正在使用Web客户端获取页面源。我已成功登录。之后,我使用相同的对象来获取使用不同URL的页面源,但它显示的异常如下:

java.lang.ClassCastException: com.gargoylesoftware.htmlunit.UnexpectedPage cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlPage

这是我正在使用的代码。

            forms = (List<HtmlForm>) firstPage.getForms();
        form = firstPage.getFormByName("");

        HtmlTextInput usernameInput = form.getInputByName("email");
        HtmlPasswordInput passInput = form.getInputByName("password");
        HtmlHiddenInput redirectInput = form.getInputByName("redirect");
        HtmlHiddenInput submitInput = form.getInputByName("form_submit");

        usernameInput.setValueAttribute(username);
        passInput.setValueAttribute(password);

        //Create Submit Button
        HtmlElement button = firstPage.createElement("button");
        button.setAttribute("type", "submit");
        button.setAttribute("name", "submit");
        form.appendChild(button);
        System.out.println(form.asXml());
        HtmlPage pageAfterLogin = button.click();

        String sourc = pageAfterLogin.asXml();

        System.out.println(pageAfterLogin.asXml());

    /////////////////////////////////////////////////////////////////////////

以上代码成功运行并登录 之后我使用此代码

    HtmlPage downloadPage = null;       
downloadPage=(HtmlPage)webClient.getPage("url");

但我得到了例外

java.lang.ClassCastException: com.gargoylesoftware.htmlunit.UnexpectedPage cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlPage

2 个答案:

答案 0 :(得分:1)

JavaDoc of UnexpectedPage内,他们声明了

  

每当出现意外内容类型时返回的通用页面   由服务器返回。

我建议您检查webClient.getPage("url");

的内容类型

答案 1 :(得分:0)

而不是使用

HtmlPage downloadPage = null;       
downloadPage=(HtmlPage)webClient.getPage("url");

使用

UnexpectedPage downloadPage = null;       
downloadPage=(HtmlPage)webClient.getPage("url");

它对我很好。