Невозможно отправить форму программно с помощью HtmlUnit - PullRequest
0 голосов
/ 25 августа 2010

Я использую HtmlUnit в скрипте Groovy для получения файла csv с сайта www.goodreads.com.Этот скрипт работал до недавнего времени, когда появилась странная ошибка SSL.

Вот код Groovy

    WebClient client = new WebClient(com.gargoylesoftware.htmlunit.BrowserVersion.INTERNET_EXPLORER_6);
    client.setJavaScriptEnabled(false);
    HtmlPage signIn = client.getPage("http://www.goodreads.com/user/sign_in");
    HtmlForm signInForm = signIn.getFormByName("sign_in")
    signInForm.getInputByName("user[email]").setValueAttribute(username);
    signInForm.getInputByName("user[password]").setValueAttribute(password);
    println "I'm gonna click it !"
    HtmlPage signedIn = signInForm.getInputByName("next").click()

и связанный с ним @ Grab

@Grab(group='net.sourceforge.htmlunit', module='htmlunit', version='2.8')

Каждый раз, когда запускается этот код, я получаю

INFO: Bad input type: "email", creating a text input
I'm gonna click it !
Caught: java.lang.RuntimeException: java.net.SocketException: java.security.NoSuchAlgorithmException:
 Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
    at Goodreads.getCSV(goodreads.groovy:184)
    at Goodreads.run(goodreads.groovy:38)
    at Goodreads.main(goodreads.groovy:215)

Строка 184, которая соответствует строке signInForm.getInputByName("next").click(), где, как я полагаю, происходит ошибка.Может быть, это как-то связано с выбором реализации Goodreads SSL, который

Учитывая, что я могу правильно войти на этот сайт, используя Opera, Firefox, как появляется эта ошибка?и, что еще более важно, что я могу сделать, чтобы это исправить?

Назначение дополнительной формы уведомления - url https://www.goodreads.com/user/sign_in

Открытие этого URL дает доступ к странице, которую Opera указывает как TLS v1.0256 бит AES (1024 бит DHE_RSA / SHA)

1 Ответ

0 голосов
/ 25 августа 2010

Ах, я не знал этого трюка.

Небольшое прибегание к поиску показало, что в таком случае вызов WebClient#setUseInsecureSSL(true) является правильным решением.Но я не знаю почему ...

...