Я не знаю, как указать, сколько байтов нужно загрузить с помощью обычного HTTPd-запроса. Это ситуация «все или ничего».
Некоторые типы файлов разрешают разделы файлов, но для этого вам необходимо иметь контроль над сервером.
Прошло много времени с тех пор, как я играл на этом уровне, но теоретически вы могли бы использовать блок с Net::HTTP или Open-URI и считать байты, пока не получите соответствующее число, чтобы добраться до блока размера изображения. , затем закройте соединение. Ваш стек TCP, вероятно, не был бы слишком доволен вами, особенно если бы вы делали это много. Если я правильно помню, он не будет избавляться от памяти до тех пор, пока не истечет время ожидания соединения, и съест доступные соединения либо на вашей стороне, либо на сервере. И, если бы я запустил сайт и обнаружил, что производительность моего сервера скомпрометирована вашим приложением, преждевременно закрывающим соединения, я бы вас забанил.
В конечном счете, лучшее решение — поговорить с тем, кто владеет сайтом, который вы грабите, и посмотреть, есть ли у него API, чтобы сообщить вам размеры файлов. Их сторона соединения может обнаружить это намного быстрее, чем ваша сторона, поскольку вам нужно получить весь файл. Если ничего другого, предложите написать им что-нибудь, что может сделать это. Возможно, они поймут, что, включив его, вы не будете использовать всю их полосу пропускания для получения изображений.
person
the Tin Man
schedule
10.05.2011