Вы наверняка уже ознакомились с содержимым различных закладок "Indy (...)" в Delphi. Компонентов там немало, и каждый из них может быть полезным. Я сама работала далеко не со всеми, так как не вижу надобности их изучать без определенной задачи.
В базовый дистрибутив Delphi входят Indy v.9 с копейками. Наверное, желательно сразу сделать обновление до более новой версии (например, у меня сейчас 10.0.76, но есть и более поздние, вроде).
Есть клиентские и серверные компоненты для работы с одними и теми же протоколами. Indy реально упрощают разработку приложений, в отличие от варианта разработки того же самого функционала на сокетах. Например, чтобы установить связь с сервером, вы должны просто-напросто вызвать метод Connect. Успешное установление соединения ознаменуется возвратом из метода без возникновения эксепшена. Если же соединение неызовется установится — вызовется исключение.
"Академический" пример (код не рабочий, не запускайте :) ):
with IndyClient do
begin
Host := 'test.com';
Port := 2000;
Connect;
Try
// работа с данными (чтение, запись...)
finally
Disconnect;
end;
end;
Host и port могут быть установлены в инспекторе объектов или в рантайме.
Для чего же можно использовать компоненты Indy в задачах парсинга? Применение разнообразно! Самое простое — получение содержимого страницы (с этим уже все, наверное, сталкивались) с использованием компонента IdHTTP:
var
rcvrdata: TMemoryStream;
idHttp1: TidHttp;
begin
idHttp1 := TidHttp.Create(nil);
rcvrdata := TMemoryStream.Create;
idHttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)';
idHttp1.Request.AcceptLanguage := 'ru';
idHttp1.Response.KeepAlive := true;
idHttp1.HandleRedirects := true;
try
idHttp1.Get(Edit1.Text, rcvrdata);
finally
idHttp1.Free;
end;
if rcvrdata.Size > 0 then begin
ShowMessage('Получено ' + inttostr(rcvrdata.Size));
rcvrdata.SaveToFile('c:\111.tmp');
end;
rcvrdata.Free;
end;
Как видно, можно не только получить содержимое страницы, но и имитировать загрузку документа с определенного клиента. Компоненты Indy вообще удобны для формирования заголовков и POST-запросов. Об этом с примерами в следующий раз.
Чтобы быть в курсе обновлений блога, можно подписаться на RSS.
Маша, Indy полный отстой. Когда кодил несколько сетевых утилиток, намучался с этем инди. Простая функция get вызывала исключение "Значение '' не является числом" (вольно), погуглил, оказывается не у меня одного, настройки ничего не меняют. Чтобы Indy заработал с SSL это вообще нужно с огромным бубном попрыгать, а работа SSL+Socks5 вообще не возможна, баг в компоненте, который до сих пор не исправлен. Свойство прокси с поддержкой FTP прокси есть, но оно не работает, это мелким шрифтом написано в документации, непонятно зачем тогда оно там есть. Много ошибок при обработке чанкет страниц и сжатия. Короче тогда я плюнул и написал всё на чистом WinSock2. А сейчас на WinSock писать слишком объемно, поэтому нашел замену - ICS компоненты. Правда там нет КукаМенеджера, сейчас прикручиваю от Indy (ибо аналогов просто нет). При этом безглючный КукаМенеджер есть только в самой последней версии инди, в других он со множеством багов. Вот так.
ОтветитьУдалитьSbseo, спасибо за развернутый комментарий. Насчет багов Indy я в курсе :) Но считаю, что начинать работать с интернетом проще всего именно через эти компоненты. А статья рассчитана именно на начинающих.
ОтветитьУдалитьЗа ICS спасибо, поищу информацию и ознакомлюсь на досуге :)
Маша, я же говорю, что мне не удалось скомпилить ни одного приложения. Вернее они компилятся но не работают. Дома у меня последняя версия Инди, там не работает функция Get, поэтому твой пример кода никак не поможет например мне при изучении Инди, а вот на работе стоит Delphi 7 со стандартным инди, там Get работает, но на работе стоит прокси с Ntlm авторизацией, вот с ней инди не работает :) Поэтому новичам конечно оно может и поможет, если у них компонент будет работать. Ну а со своей стороны я бы предложил новичкам начать работать с библиотекой WinInet (это врапер WinSock для интернет эксплорера). Если освоят ее, то дальше сами смогут определить, какой компонент (библиотека) им более удобна, т.к. в WinInet нет множества очень нужных функций. А библиотека в скобочках, потому, что многие используют библиотеку Синапсис, она в виде отдельной DLL, но функций там столько же, сколько и в Indy, и всё более качественно. Насчет кукаМенеджера кстати не знаю, есть он там или нет. Надо посмотреть...
ОтветитьУдалитьЭто всего лишь моя точка зрения и она может не совпадать с вашей, я ничего никому не навязываю. Удачи.
>А сейчас на WinSock писать слишком объемно, поэтому нашел замену - ICS компоненты. Правда там нет КукаМенеджера, сейчас прикручиваю от Indy (ибо аналогов просто нет).
ОтветитьУдалитьПовеселил, "специалист".
Прикручивать куки менеджер от другой либы - не извращение ли?
Самому обработать событие OnCookie религия не позволяет или отсутствие знаний?
Текущая версия Indy работает на ура! Get и Post + SSL, все заработало с полпинка! Остается только радоваться))
ОтветитьУдалитьТолько единственное, что было не понятно, почему пришлось к ssl отдельно скачивать библиотеки. Компоненты есть, а библ. не включили))
А в uses что прописать? У меня Delphi XE3.
ОтветитьУдалить