HtmlUnit无法通过OpenID登录

时间:2014-02-25 23:28:11

标签: java htmlunit google-openid

  1. 目标:使用htmlUnit登录Yahoo Fantasy Basketball
  2. 问题:我使用OpenID专门登录Google Open ID。我能够输入登录信息但是一旦我提交,我在junit中得到一个html 400错误。
  3. 理论:不确定这是否与站点重定向有关,因为当我(我是物理登录)时,openID窗口关闭,原始窗口被转发到幻想页面。

    import java.io.IOException;     import java.net.MalformedURLException;     import java.util.ArrayList;     import java.util.List;

    import junit.framework.Assert;
    import junit.framework.TestCase;
    
    import org.junit.Test;
    
    import com.gargoylesoftware.htmlunit.BrowserVersion;
    import com.gargoylesoftware.htmlunit.CookieManager;
    import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.html.HtmlForm;
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
    import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
    import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
    import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
    
    public class pageGrabber extends TestCase {
    
            @Test
            public void testGoogle() throws FailingHttpStatusCodeException, MalformedURLException, IOException{
                final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
    
                 CookieManager cm = new CookieManager();
                 cm.setCookiesEnabled(true);
                 webClient.setCookieManager(cm);
    
    
                    final HtmlPage page = webClient.getPage("https://accounts.google.com/ServiceLogin?service=lso&continue=https://accounts.google.com/o/openid2/auth?zt%3DChQ0RExRRjBINXZvd0hfNE5UcjcyYhIfMHZ2TXYtTkpsc2tiTXFUbUhqeVRGR1BxejBfTmlBSQ%25E2%2588%2599APsBz4gAAAAAUwv0r-GHODUgm8z7qyiJMR2n6vRkrQQZ%26from_login%3D1%26hl%3Den-US%26as%3D5c29d1e6186004c9&ltmpl=popup&shdf=ChILEgZkb21haW4aBllhaG9vIQwSA2xzbyIUeOFO0MZJCAehMIDrHDhgU0wjl6MoATIUOlhjH8DZwwDjkCeSuuffbdnYH5g&hl=en-US&sarp=1&scc=1&authuser=0");
                    Assert.assertEquals("Sign in - Google Accounts", page.getTitleText());  
                    String text = page.asText();
                    System.out.println(text);
    
                    //select Form and fill it out
                    List<HtmlForm> listOfForms = new ArrayList<HtmlForm> ();
                    listOfForms= page.getForms();
    
                    final HtmlForm form = listOfForms.get(0);
                    final HtmlSubmitInput button = form.getInputByName("signIn");
                    final HtmlPasswordInput password = form.getInputByName("Passwd");
                    final HtmlTextInput email = form.getInputByName("Email");
    
                    email.setValueAttribute("xxx@gmail.com");
                    password.setValueAttribute("xxxxxxxx");
    
    
                    final HtmlPage page2=   button.click();
    
    
                    String text2 = page2.asText();
    
    
                    System.out.println(text2);
                    Assert.assertEquals("Yahoo Sports Fantasy Basketball - Two Years After - Retro Ballers", page2.getTitleText());
    webClient.closeAllWindows();
    }
    }
    
  4. 和堆栈跟踪

    com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 400 Bad Request for https://accounts.google.com/o/openid2/auth?zt=ChQ0RExRRjBINXZvd0hfNE5UcjcyYhIfMHZ2TXYtTkpsc2tiTXFUbUhqeVRGR1BxejBfTmlBSQ%E2%88%99APsBz4gAAAAAUwv0r-GHODUgm8z7qyiJMR2n6vRkrQQZ&from_login=1&hl=en-US&as=5c29d1e6186004c9&auth=DQAAAIcAAABmwdTaHvzgHJvQiSH_InslYqP05WKBypJv8wOtm2SHdHFtu2zIgPBMmbExjpNNoZYg07HK-PD4jITMIvgyStIol1-lMt4RQEahUlGEhXTmwO8CftNVp82jLofISVva2cyqhnvX2AvMRp7Dztg8IdobV05DukBIX2vtLgx1WPR8Qie7ehjIKvcot-ugd945ZlA
    at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:514)
    at com.gargoylesoftware.htmlunit.WebClient.loadDownloadedResponses(WebClient.java:2067)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:717)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:804)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1322)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1265)
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1213)
    at com.Frido.NBA.pageGrabber.testGoogle(pageGrabber.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:243)
    at junit.framework.TestSuite.run(TestSuite.java:238)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    

0 个答案:

没有答案