Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 885

/ вопрос открыт /

Добрый день!
Подскажите, пожалуйста, как при помощи idhttp загружать не полностью страницу а только часть?

Например, страница весит 60 кб, а как загрузить html код с верху 20 кб?

Примечание #1 (9 сентября 2008, 11:12):
как разрывать соединение?

Cool Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 9 сентября 2008, 10:54
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Cool!
То есть загрузить то, что выше 20кб и до 60? Скажем так, для страничек в общем это не возможно. Для файлов - возможно, да и то, не всегда.
Для того, что бы скачать "кусок" файла, надо вначале сделать запрос HEAD, Indy умеет. после этого можно узнать размер. Если удалось, то первая преграда пройдена. Теперь можно делать GET запрос, только предварительно надо заполнить свойство range (диапазон) в Request. указывается через дефис. Например 10-20 - с десятого по двадцатый байт. 10- с десятого до конца (то есть надо написать 10 и дефис)
Только ещё раз предупрежу. Не все серверы обрабатывают этот запрос для обычных страничек. С другой стороны они часто это сделать просто не в силах.
P.S. Новый способ экономить на интернете?:) Не так экономлят.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 сентября 2008, 11:14


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 14 сентября 2008, 20:26; участников в обсуждении: 3.
Cool

Cool (статус: Посетитель), 9 сентября 2008, 11:20 [#1]:

Да нет, мне надо загрузить сверху (от 0 до 20 кб) страничку?
Вадим К

Вадим К (статус: Академик), 9 сентября 2008, 11:22 [#2]:

ну тогда указываем -20480
хотя можно в этом случае и по другому. в событии OnWork считаем байты. Как только набежало нужное кол-во - прерываем загрузку. По моему метод Abort.
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 9 сентября 2008, 11:23 [#3]:

Странно, в вопросе написано от 20 до 60кб, а тут уже от 0 до 20. вы определитесь:).
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 9 сентября 2008, 11:27 [#4]:

procedure TForm_main.IdHTTPWork(ASender: TObject;
AWorkMode: TWorkMode; AWorkCount: Integer);
begin
if (AWorkCount > 3000) and (AWorkCount < 3700) then
IdHTTP. ?
end;
Вадим К

Вадим К (статус: Академик), 9 сентября 2008, 11:36 [#5]:

idhttp1.Disconnect
Только не рекомендую писать так условие
if (AWorkCount > 3000) and (AWorkCount < 3700) then
Есть большая вероятность, что можно "проскочить". Компонент не обязуется выдавать с какой то заданной периодичностью.
А выкачать с точностью до байта этим методом никак не получиться - данные всё равно передаются пакетами. Поэтому всегда будете немного "перекачивать".
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 9 сентября 2008, 11:37 [#6]:

что за метод Abort ?
Cool

Cool (статус: Посетитель), 9 сентября 2008, 11:40 [#7]:

понял,

при этом

try
html := Form_main.IdHTTP.Get('http://ya.ru/');
except
end;

в html ничего нет, а по снифферу видно что скачал 4,47 кб ?
Cool

Cool (статус: Посетитель), 9 сентября 2008, 11:42 [#8]:

и html-код!?
Вадим К

Вадим К (статус: Академик), 9 сентября 2008, 11:49 [#9]:

по поводу Abort - не всё я помню, это от другого компонента.
чувствую, что просто так с строкой не получиться, надо поток открывать.
var ms:TMemoryStream;
begin
 ms:=TStringStream.create('');
 try
   idhttp.get('http://ya.ru', ms);
 except
 end;
  ms.data //вроде так тазывается метод, который даёт доступ к строке
  ms.free;
end;
Я сижу на работе под Linux и мне сложно проверять некоторые вещи.:)
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 14 сентября 2008, 16:04 [#10]:

на куликсе проверяй)
Чисти код! Чисти код! Чисти код!
Вадим К

Вадим К (статус: Академик), 14 сентября 2008, 20:26 [#11]:

Его надо поставить для начала - он на новых ядрах не хочет нормально ставиться. Да и есть лазарус...
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.03 сек.