我已经尝试了将近六个小时的解决方法,但无济于事。
我有一个简单的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

09-25 20:39