У меня есть довольно простой код, который вызывает вызов по URL-адресу, получает ответ и, если есть сущность, перенося объект вниз.Почему HttpEntity и HttpResponse не сообщают длину содержимого должным образом?
Уловка возникает, когда я добавил тест длины содержания объекта. Я могу запустить вызов через прокси-сервер и увидеть, что заголовок Content-Length становится установлен правильно:
Content-Disposition: attachment; filename="something.zip";
Content-Length: 12390600
Content-Type: application/zip
Так что в моем коде я проверить, что:
HttpResponse response = _client.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null && entity.getContentLength() > 0) {
handleEntity(entity);
}
Если я смотрю на ответ, все ожидаемые заголовки есть кроме для длины содержимого. Когда я проверяю объект сущности, он возвращает -1 для вызова getContentLength(). В документации, если длина вашего контента превышает Long.MAX_VALUE, она вернет отрицательное число, но that's not the case here.
Итак, я только что удалил эту проверку, но я действительно хотел бы понять, что означает в этом контексте , Документы добавляют предостережение о том, что он вернет длину содержимого «если известно», но в этом случае кажется, что он ДОЛЖЕН быть известен.
Спасибо за любое понимание того, что происходит здесь ...
Так содержание HTTP сообщения длина включает в себя фреймы границ MIME и размер кодированного контента и т. д.? Есть ли способ перевести это обратно на размер фактической полезной нагрузки сообщения, чтобы я мог знать, например, опубликованный контент Zip составляет 12 МБ или что-то еще? –
@SpankyQuigman Я не думаю, что это возможно, если сообщение закодировано в блоке – oleg
Спасибо, я не знал об этом. Я изменил код, чтобы не ожидать этого значения для объекта, и теперь он просто смотрит, есть ли сущность или нет. –