Я в тупике об этом, поэтому я подумал, что спрошу, если кто-то из вас встретит это, так как разработка HttpClient - это немного искусства.Периодически неполный ответ с использованием Apache HttpClient 3.0.1
Проблема, с которой я столкнулся, заключается в следующем: приложение использует Java-библиотеку Apache HttpClient для связи с сервером в той же сети компании. Большую часть времени он работает без проблем, но иногда мы увидим шквал исключений, вызванных неполными ответами: им не хватает последних трех символов закрывающего тега, поэтому жалобщик в клиенте жалуется. Это длится от 5 до 10 минут, а затем уходит.
Я не смог реплицировать эту проблему локально, и я подтвердил, что ответ полностью написан сервером. Клиент получает контент ответа с помощью метода getResponseBodyAsStream() PostMethod, но он вызывается только один раз. Может быть, ему нужно цитировать вызов этого метода до тех пор, пока он не станет нулевым для редкого случая, когда реакция буферизуется?
Буду признателен за любой ввод.
Edit: Сервер записывает заголовок длины содержимого и правильно топить, и на клиенте, данные считываются в строку с:
//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
Редактировать: Как со многими трудно найти ошибки, проблема, похоже, связана со специальными символами (европейские символы с акцентом, немецкие длинные и т. Д.). После того, как сообщения были нормализованы для удаления этих символов, ошибки были остановлены. – Munir
Наличие аналогичной проблемы. Точно такой же URL. Используя браузер/Curl, дайте мне полные данные. Но, Httpclient получает неполный результат ...! – thinkanotherone