0

我在 Groovy 脚本中使用 HtmlUnit 从 www.goodreads.com 站点获取 csv 文件。这个脚本直到最近才工作,出现了一些奇怪的 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 正确登录该站点,该错误是如何出现的?而且,更重要的是,我能做些什么来解决它?

Additionnaly 通知表单目的地是 url https://www.goodreads.com/user/sign_in

打开此 URL 可访问 Opera 指示为 TLS v1.0 256 位 AES(1024 位 DHE_RSA/SHA)的页面

4

1 回答 1

0

啊,不知道这个把戏。

一点谷歌搜索表明,在这种情况下,调用WebClient#setUseInsecureSSL(true)是一个正确的解决方案。但是不知道为什么...

于 2010-08-25T15:47:53.810 回答