0

私はこれに対する回避策を6時間近く続けて見つけようとしていますが、役に立ちません。
Webサイトにサインインする単純な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..  

JDKがgzipファイルを管理していた方法にバグがあるようです(!)。Javaにはまだこのバグがあるようです。唯一の回避策は、次のように、gzipでエンコードされたデータを受け入れないようにHttpUnitに指示することです。

WebConversation.getClientProperties().setAcceptGzip(false);

残念ながら、これはできません。サインインを成功させるには、gzipを有効にする必要があります。有効にしないと、(サインインせずに)一般的なホームページにリダイレクトされます。
これを機能させる唯一の方法は、HttpUnitのソースコードを変更し、gzip解析でEOFの例外を処理することだと思います。私は必死に助けが必要です。誰かがこれに対する解決策を持っていますか?

そうでない場合は、フォームへの入力やサインインなどのタスクのために、HttpUnitなどのJavaで同等に単純なAPIを提案できますか。

4

2 に答える 2

1

これを機能させる唯一の方法は、HttpUnitのソースコードを変更し、gzip解析でEOFの例外を処理することだと思います。

これは、サードパーティのライブラリにバグがある場合の開発者にとっての解決策であることがよくあります。HttpUnitの問題がわかっている場合は、ローカルで修正してみませんか?修正をプロジェクトにプッシュバックして、彼らがそれを採用することを期待することもできます。

そうでない場合は、フォームへの入力やサインインなどのタスクのために、HttpUnitなどのJavaで同等に単純なAPIを提案できますか。

あなたがウェブサイトを横断するための図書館を意味するならば、たくさんあります。「ヘッドレス」HTTPクライアントが必要な場合は、ApacheHttpComponentsHttpClientを試してください。実際にブラウザを使用するものが必要な場合は、Seleniumを試してください。

于 2012-05-29T19:50:17.647 に答える
0

この問題はHttpUnit1.7で修正されたようです(私は1.6を使用していました)。
とにかく、私は@ShaggyFrogによって提案されたようにHttpComponentsに移行しています。これは、Cookieとセッションに関するより大きな未知の問題に直面しているためです。

編集: HttpComponentsは非常に複雑だったようです。ある時点で、Http302リダイレクトを手動で処理する必要がありました。そこで、HttpUnitと非常によく似ていますが、Cookieやgzipの問題がないHtmlUnitに移行することにしました。チャームのように働いた。

于 2012-05-29T20:52:07.060 に答える