Размер страницы
От: B0BAH  
Дата: 02.07.03 08:24
Оценка:
Можно ли, и каким образам, получить размер html странички НЕ СКАЧИВАЯ ЕЁ, и возможно ли сделать это если страничка формируестя на сервере из php?
Re: Размер страницы
От: mikkri Великобритания  
Дата: 02.07.03 09:13
Оценка:
Здравствуйте, B0BAH, Вы писали:

BBA>Можно ли, и каким образам, получить размер html странички НЕ СКАЧИВАЯ ЕЁ, и возможно ли сделать это если страничка формируестя на сервере из php?


Можно послать серверу команду HEAD.
Далее проверить полученный заголовок на содержание content-length. Если он там есть, то это размер ответа, который пришел бы по команде GET, если нет, то и ответа нет.

Насколько я понял из HTTP/1.1 веб сервер в ответ на запрос HEAD не должен отправлять размер контента, а значит, высока вероятность, что размер контента без отправки команды GET ты не получишь.

Есть еще вариант — послать GET, а скачивание прервать сразу же после считывания заголовков. В ответ на GET нормальный сервер тебе точно даст content-length. Вот и узнаешь размер файла.

P.s. еще могу порекомендовать чаще пользоваться поиском. Например, точно такой же вопрос обсуждался ранее в теме веб-программирования.
Re[2]: Размер страницы
От: B0BAH  
Дата: 02.07.03 11:17
Оценка:
Здравствуйте, mikkri, Вы писали:

M>Можно послать серверу команду HEAD.

M>Далее проверить полученный заголовок на содержание content-length. Если он там есть, то это размер ответа, который пришел бы по команде GET, если нет, то и ответа нет.

M>Насколько я понял из HTTP/1.1 веб сервер в ответ на запрос HEAD не должен отправлять размер контента, а значит, высока вероятность, что размер контента без отправки команды GET ты не получишь.


M>Есть еще вариант — послать GET, а скачивание прервать сразу же после считывания заголовков. В ответ на GET нормальный сервер тебе точно даст content-length. Вот и узнаешь размер файла.


А можно ли использовать процедуру: procedure Get(AURL: string; const AResponseContent: TStream); overload; (класс TIdHTTP)???
То есть если использовать просто function Get(AURL: string): string; overload; то страница сразу качается, а при вызове процедуры она скачается или нет? Мне вообще не понятно как работает процедура (я по потоки ничего не знаю), но я понял что у потока есть свойство size, может через него получится?
И ещё вопросс как разорвать соединение сразу после получения заголовка если использовалась функция Get?
Re[3]: Размер страницы
От: mikkri Великобритания  
Дата: 02.07.03 11:38
Оценка:
Здравствуйте, B0BAH, Вы писали:

BBA>А можно ли использовать процедуру: procedure Get(AURL: string; const AResponseContent: TStream); overload; (класс TIdHTTP)???

BBA>То есть если использовать просто function Get(AURL: string): string; overload; то страница сразу качается, а при вызове процедуры она скачается или нет? Мне вообще не понятно как работает процедура (я по потоки ничего не знаю), но я понял что у потока есть свойство size, может через него получится?
BBA>И ещё вопросс как разорвать соединение сразу после получения заголовка если использовалась функция Get?

Насколько мне известно, в Indy вся функциональность по работе с HTTP глубоко запрятана. Например, в той версии, которую я изучал, небыло такой вещи, как частичная закачка.

Кстати, можешь попробовать указывать range в заголовках при отправке GET. Если веб-сервер поддерживает докачку, то он тебе отдаст контент только в нужном интервале. Хотя в случае php это вряд ли, но нужно проверить — сам не знаю. Тогда и Indy сойти должны. Опять же если тебе сервер не вернет content-length, а он это может сделать, то без полного скачивания размер контента ты никак не узнаешь.

Еще совет — почитай W3C HTTP спецификацию. Может на какие мысли приведет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.