DELPHISOURCE
Домой | Статьи | Книги | FAQ | Компоненты | Программы |
Архив сайта | Реклама на сайте | Ссылки | Связь |
Использование HTTP в Delphi
Введение
В связи с все большим вниманием, которое привлекает к себе Интернет, все больше людей становятся заинтересованы в сетевых технологиях. Данная статья посвящена программированию на Borland Delphi с использованием одного из самых популярных Интернет-протоколов - HTTP.
А именно, здесь мы рассмотрим компонент TNMHTTP (NetMasters HTTP), который можно обнаружить на вкладке FastNet палитры компонентов Дельфи.
Начнем с теории. Если Вы уже знаете, что такое HTTP и зачем он нужен, то пропустите следующий раздел.
Зачем нужен HTTP
Итак, где же используется HTTP? Если Вы хотя бы чуть-чуть заглядывали на Интернет-странички и встречались с термином Web, то наверняка обратили внимание на то, что адреса страничек, как правило, начинаются с http://. Протокол HTTP (HyperText Transfer Protocol) позволяет принимать и посылать не только гипертекстовые документы (типа html), но и любые другие (тексты (txt), изображения (gif, jpg), и т.д.). Ниже приведены типовые задачи, для выполнения которых необходимо использовать HTTP:
Браузеры - программы, позволяющие просматривать Интернет-странички;
Скачивальщики - программы, позволяющие скачивать из Интернета странички, рисунки и другие документы;
Чаты - программы, позволяющие общаться по сети. Часто документы HTTP используются для хранения сообщений (как, например, в конференциях).
- Это лишь список некоторых из стандартных направлений программирования с использованием HTTP. Вы можете применять этот протокол для любых своих целей. Например, автоматические системы обновления данных, посылка запросов в Интернетовские базы, и еще множество всяческих других возможностей!
Краткое описание свойств, методов и событий
Ниже приведена таблица, содержащая наиболее краткое описание основных свойств, методов и событий компонента TNMHTTP:
Свойства |
Методы |
События | ||
Body - строка, содержащая либо путь к файлу,
в который будет записано тело http-документа (если св-во
InputFileMode равно True), либо непосредственно само
тело (если св-во InputFileMode равно False). Тип:
string; Далее некоторые свойства, унаследованные от TPowerSock: BytesRecvd, BytesSent,
BytesTotal - количество отправленных, принятых
и общее количество байтов соотвественно. Тип:
LongInt; Еще есть множество свойств, но я пока остановлюсь на уже перечисленных. За дополнительной информацией обращайтесь к help-у по Дельфи. |
Get(URL: string) - посылает запрос на
указанный URL. Данные после выполнения этого запроса записываются в
файлы или в сами свойства Body и Header (в зависимости
от значения свойства
InputFileMode); Далее некоторые методы, унаследованные от TPowerSock: Abort и Cancel -
прерывают соединение и обмен
данными; |
OnAuthenticationNeeded - возникает, когда
сервер требует указания имени пользователя и пароля. В обработчике
этого события (если оно возникнет) Вы должны ответить серверу,
запонив нужными значениями соответствующие переменные.
Примечание: Перед установлением соединения можно сразу
заполнить поля UserID и Password в свойстве
HeaderInfo; Далее некоторые методы, унаследованные от TPowerSock: OnConnect - возникает, когда соединение с
сервером успешно
установлено; |
Практика и примеры
Ну а теперь приступим к самому главному методу изучения - на примерах.
И самый первый пример - программа, позволяющая определить, существует ли заданный URL:
Пример 1. Проверка существования указанной URL |
{... Здесь идет заголовок файла и
определение формы TForm1 и ее экземпляра
Form1} |
Далее - скачивание указанной странички в указанный файл.
Пример 2. Скачивание указанной URL в заданный файл |
{... Здесь идет заголовок файла и
определение формы TForm1 и ее экземпляра
Form1} |
Следующий пример - скачивание сразу нескольких URL одновременно. Надо заметить, что многие программисты пренебрегают многозадачностью Windows (неважно, как она реализована, речь сейчас не об этом). В Дельфи очень легко создавать отдельные, подчиненные Вашей программе процессы (а точнее - потоки) с помощью базового класса TThread. Но об этом мы поговорим в другой раз (в другой статье).
Пример 3. Одновременное скачивание указанных URL в заданный каталог |
{... Здесь идет заголовок файла и
определение формы TForm1 и ее экземпляра
Form1} |
ПРИМЕЧАНИЕ: Чтобы завершить некоторый процесс (Thread), нужно вызвать метод Terminate класса этого процесса. Приостановить процесс можно оператором Suspend, а продолжить выполнение - Resume. Также можно настроить приоритет каждого отдельного процесса через свойство Priority.
Неплохой пример работы с процессами можно найти в подпапке Demos\Threads папки, куда Вы установили Delphi.
Замечания по алгоритмам типовых задач
Если Вы собираетесь создать скачивалку сайтов, то Вам необходимо учитывать следующее (решить следующие проблемы):
Нужно скачивать не только саму страничку в формате HTML, но и все входящие в нее рисунки (gif, jpg, и т.д.);
в некоторых случаях удобно скачивать не одну страничку, а несколько страниц, ссылки на которые находятся на первой из скачиваемых страничек. При этом нужно учитывать, что на страничке могут находиться и ссылки на другие сайты, поэтому необходимо анализировать скачиваемые ссылки (чтобы случайно не скачать весь Интернет). Для решения задачи со скачиванием нескольких страничек нужно использовать рекурсию;
необходимо качественно информировать пользователя о ходе закачки. Т.е. показывать общее и скачанное количество информации;
после скачивания нужно заменить Интернетовские ссылки на локальные, чтобы можно было просматривать странички в режиме offline.
Эпилог
В этой статье отображены основные приемы работы с компонентом TNMHTTP в Дельфи. Если у Вас есть вопросы - скидывайте их мне на E-mail: snick@mailru.com, а еще лучше - пишите в конференции этого сайта (Delphi. Общие вопросы), чтобы и другие пользователи смогли увидеть Ваш вопрос и попытаться на него ответить!
Замечу, что TNMHTTP - не единственный компонент, релизующий доступ по протоколу HTTP. Есть и его аналоги с более расширенными возможностями, например, набор компонентов ICS (Internet Component Suite), в состав которого входит даже компонент FTPServer, позволяющий легко запрограммировать свой собственный сервер FTP для Windows. Этот набор можно скачать на сайте Delphi Super Page.
Delphisource (2006г.) |