2013-07-22 1 views
0

У меня есть довольно простой код, который вызывает вызов по 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.

Итак, я только что удалил эту проверку, но я действительно хотел бы понять, что означает в этом контексте , Документы добавляют предостережение о том, что он вернет длину содержимого «если известно», но в этом случае кажется, что он ДОЛЖЕН быть известен.

Спасибо за любое понимание того, что происходит здесь ...

ответ

1

Я подозреваю, что вы путаете HTTP длину содержимого сообщения и что из отдельных частей MIME тела в многочастном содержимом теле

+0

Так содержание HTTP сообщения длина включает в себя фреймы границ MIME и размер кодированного контента и т. д.? Есть ли способ перевести это обратно на размер фактической полезной нагрузки сообщения, чтобы я мог знать, например, опубликованный контент Zip составляет 12 МБ или что-то еще? –

+0

@SpankyQuigman Я не думаю, что это возможно, если сообщение закодировано в блоке – oleg

+0

Спасибо, я не знал об этом. Я изменил код, чтобы не ожидать этого значения для объекта, и теперь он просто смотрит, есть ли сущность или нет. –