我已经尝试了将近六个小时的解决方法,但无济于事。
我有一个简单的HttpUnit程序,该程序可以登录网站。问题是当我最终以表单形式提交日志时遇到此错误:
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:223)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:92)
at com.meterware.httpunit.WebResponse.readFromStream(WebResponse.java:967)
..and so on..
早在2002年就报告了JDK管理gzip文件的方式a bug(!)。看来Java仍然存在此错误,唯一的解决方法是告诉HttpUnit不接受gzip编码的数据,如下所示:
WebConversation.getClientProperties().setAcceptGzip(false);
不幸的是,我做不到。为了使登录成功,我需要启用gzip,否则,我将被重定向到通用主页(无需登录)。
我怀疑使这项工作唯一的方法是更改HttpUnit的源代码并在其gzip解析中处理EOF异常。我非常需要帮助。有人对此有解决方案吗?
如果不是,那么您可以建议使用Java中的一些等效的简单API(例如HttpUnit)来完成诸如填写表格和登录之类的任务。
最佳答案
我怀疑进行这项工作的唯一方法是更改源
HttpUnit的代码,并在gzip解析中处理EOF异常。
当第三方库中存在错误时,这通常是开发人员的解决方案。如果您知道HttpUnit的问题所在,为什么不在本地解决它?您甚至可以将修补程序推回项目,并希望他们采用。
如果不是,那么您可以建议使用Java中的一些等效的简单API(例如HttpUnit)来完成诸如填写表格和登录之类的任务。
如果您的意思是遍历网站的图书馆,那有很多。如果需要“无头” HTTP客户端,请尝试Apache HttpComponents HttpClient。如果您想要实际使用浏览器的内容,请尝试Selenium。