私はこれについて困惑しているので、HttpClient の開発はちょっとした芸術であるため、誰かがそれに遭遇した場合に備えて質問すると思いました。
私が直面している問題は次のとおりです。アプリケーションが Apache HttpClient Java ライブラリを使用して、同じ企業ネットワーク内のサーバーと通信しています。ほとんどの場合は問題なく動作しますが、不完全な応答が原因で例外が大量に発生することがあります。これらはすべて終了タグの最後の 3 文字が欠落しているため、クライアントのパーサーがエラーを出します。これはおそらく5〜10分間続き、その後消えます.
この問題をローカルで再現することはできませんでした。応答がサーバーによって完全に書き込まれていることを確認しました。クライアントは PostMethod の getResponseBodyAsStream() メソッドを使用して応答コンテンツを取得していますが、1 回しか呼び出されていません。おそらく、応答がバッファリングされるまれなケースで null になるまで、このメソッドの呼び出しをループする必要がありますか?
ご意見をお待ちしております。
編集: サーバーは content-length ヘッダーを書き込んで正しくフラッシュしています。クライアントでは、データは次の文字列に読み込まれます。
//method is a PostMethod, client is a HttpClient
client.executeMethod(hostconfig, method);
InputStream is = method.getResponseBodyAsStream();
String response = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) > 0) {
bos.write(buf, 0, len);
}
response = new String(bos.toByteArray(), "UTF-8");
} ... // closing try block