Главная » Статьи » Программирование в Delphi |
Служба с 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; Header - строка, держащая либо дорога к файлу, в который полно записан шапку http-документа (если св-во InputFileMode равно True), либо непосредственно сам заголовок (если св-во InputFileMode равно False). разновидность : string; HeaderInfo - структура, держащая различную сведение о http-свидетельстве (подробней см. в help-файле). вид : THeaderInfo; InputFileMode - тип записи результата. важность True - запись в файлы, направленные в особенностях Body и Header, False - запись в сами эти признака . Тип: Boolean; OutputFileMode - тип высылаемых данных (схемами Put, Post и Trace). значительность True - данные для отправки держатся в файлах, направленных при вызове этих схем , а False - в самих мотивах этих схем . Тип: Boolean; дальше некоторые признака , унаследованные от TPowerSock: BytesRecvd, BytesSent, BytesTotal- долю отправленных, взятых и совместное количество байтов соотвественно. разновидность : LongInt; Connected - показывает, установленно ли в данный обстоятельство соединение. разновидность : Boolean; BeenCanceled - показывает, было ли порвано соединение с сервером. разновидность : Boolean; Host - строка, держащая хост-имя вырванного компьютера. наполнять не надобно , так ровно это особенность устанавливается машинально при вызове методов Get, Put, Post и т.д. разновидность : string. Port - Integer, держащий порт вытащенного компьютера (наполняется тоже машинально ); TimeOut - таймаут в миллисекундах. разновидность : Integer; опять есть тьма свойств, да я пока остановлюсь на уже перечисленных. За дополнительной сведением обращайтесь к help-у по Дельфи. способы Get(URL: string) - посылает требование на сориентированный URL. предоставленные после выполнения этого требования записываются в файлы или в сами свойства Body и Header (в зависимости от значения особенности InputFileMode); Head(URL: string)- посылает требование на сориентированный URL. предоставленные после выполнения этого требования записываются в файл или в само свойство Header (в зависимости от значения черты InputFileMode). В отличие от метода Get, при вызове Head запрос отсылается только на заголовок http-доказательства ; Post(URL, PostData: string)- посылает требование на трансформацию http-документа (с адресом URL) на данные, держащиеся в параметре PostData. Если OutputFileMode одинаков True, то в PostData должен держаться путь к файлу, держащему нужные сведения . Put(URL, PutData: string) - посылает требование на произведение http-документа (с адресом URL), держащего данные, отданные в параметре PutData. Если OutputFileMode одинаков True, то в PostData должен держаться путь к файлу, держащему нужные сведения . Trace(URL, TraceData: string) - посылает требование на приобретение отладочных предоставленных (для отладки соединения с HTTP-сервером). предоставленные для требования нужно помочь в параметре TraceData. Если OutputFileMode одинаков True, то в TraceData должен держаться путь к файлу, держащему нужные сведения . Delete(URL: string)- посылает требование на вырывание http-документа (с адресом URL). дальше некоторые технологии , унаследованные от TPowerSock: Abort и Cancel - прерывают соединение и обмен предоставленными ; Disconnect - отсоединение от HTTP-сервера; События OnAuthenticationNeeded- возникает, когда сервер призывает указания имени пользователя и пароля. В обработчике данного события (если оно появится ) Вы обязаны ответить серверу, запонив нужными значимостями соответствующие изменчивые . Примечание: Перед установлением составления можно сразу заполнить поля UserID и Password в свойстве HeaderInfo; OnAboutToSend - возникает, кое-когда компонент TNMHTTP собирается посылать данные (требование ). В обработчике этого события можно запрудить дополнительной сведением свойство SendHeader; OnFailure - возникает, подчас текущая шаг завершилась несчастливо , т.е. сотворилась ошибка; OnRedirect - возникает, сервер переадресовал высылку с сориентированной URL на другую высылку . Установив параметр handled в значение True можно возбранить переадресацию и остановиться на запрошенной URL. значимость по недоговоренности - False; OnSuccess - возникает, кое-кое-иногда текущая поступок завершилась благополучно , т.е. требование был материализован без погрешностей ; дальше некоторые технологии , унаследованные от TPowerSock: OnConnect - возникает, когда соединение с сервером благополучно установлено; OnDisconnect - возникает, когда соединение с сервером завершено; OnConnectionFailed - возникает, когда соединение с сервером найти не получилось ; OnError- возникает, подчас последняя акт была завершена с погрешностью ; OnHostResolved - возникает, когда от DNS получен IP-адрес указанного хоста; OnInvalidHost - возникает, когда DNS отдал ошибку при попытке назначить IP-адрес сориентированного хоста; OnPacketRecvd - возникает, часом значения качеств BytesRecvd и BytesTotal переменены , т.е. была принята новоиспеченная порция предоставленных от сервера; OnPacketSent - возникает, когда значения черт BytesSent и BytesTotal видоизменены , т.е. была отправлена новоиспеченная порция предоставленных на сервер; OnStatus - возникает, подчас статус составляющей был модифицирован (для освежения визуального информации пользователя); Практика и образцы ну-ка а нынче приступим к самому ключевому методу исследования - на примерах. И самый первостатейный пример - программа, позволяющая определить, живет ли заданный URL: образчик 1. Проверка наличия указанной URL {... тут идет шапку файла и определение конфигурации TForm1 и ее экземпляра Form1} {В форму необходимо поместить кнопку TButton и одно фоне TEdit. При нажатии на кнопку рождается обработчик события OnClick - Button1Click. Перед этим в TEdit надо ввести адрес URL. НЕ ЗАБУДЬТЕ уместить В конфигурацию КОМПОНЕНТ TNMHTTP!} procedure Button1Click(Sender: TObject); begin {Пытаемя получить шапка } NMHTTP1.Head(Edit1.Text); {Если URL неуверенный , то здесь выскочит погрешность } end; надлежащий пример - скачивание сразу нескольких URL одновременно. надобно заметить, будто многие программисты пренебрегают многозадачностью Windows (несущественно , как она реализована, обозрение сейчас не об данном ). В Дельфи очень легко создавать некоторые , подчиненные Вашей программе процессы (а точнее - потоки) с помощью базового класса TThread. да об данном мы поговорим в второй раз (в другой статье). образец 3. Одновременное скачивание указанных URL в заданный каталог // изображение класса кое-какого процесса type THTTPThread = class(TThread) private {ради каждого хода - учреждаем свой элемент TNMHTTP} FHTTP: TNMHTTP; protected // Execute вызывается при запуске хода ; override - заменяем // живущую процедуру базового класса TThread procedure Execute; override; // DoWork - построенная нами функция, выполнение которой синхронизируется в Execute procedure DoWork; public // URL - сотворенная нами строка, помогающая процессу, который URL ему нужно скачать URL: string; end; // В форму необходимо поместить удовлетворительно кнопки TButton, одно поле TEdit и один список // TListBox. При нажатии на кнопку Button1 пробуждается обработчик события // OnClick - Button1Click. Перед этим в TEdit надобно ввести дорога к каталогу, в // каком будут держаться скачанные файлы, а ListBox1 необходимо заполнить копией // URL-ов для скачивания (с помощью кнопок Add (Button2) и Delete (Button3)). procedure TForm1.Button3Click(Sender: TObject); begin {вытаскивание выделенного URL из копии } if ListBox1.ItemIndex >= 0 then ListBox1.Items.Delete(ListBox1.ItemIndex); end; procedure TForm1.Button2Click(Sender: TObject); var s: string; begin {прибавление URL в список} s := InputBox('Добавить','Введите URL:',''); if s <> '' then ListBox1.Items.Add(s); end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin {Проверка на присутствие каталога} if Length(Edit1.Text) > 0 then if not DirectoryExists(Edit1.Text) then MkDir(Edit1.Text); {дальше идет произведение для всякого URL в списке домашнего процесса} for i := 0 to ListBox1.Items.Count-1 do begin with THTTPThread.Create(True) do begin {учреждаем приостановленную вопрос , указываем ей ее URL и пускаем ее} URL := ListBox1.Items[i]; Resume; end; end; end; // Операторы процесса THTTPThread procedure THTTPThread.Execute; begin // мастерим так, чтобы каждый движение выполнялся одновременно с вторыми (синхронизация)} Synchronize(DoWork); end; procedure THTTPThread.DoWork; var i: Integer; begin {основываем компонент TNMHTTP} FHTTP := TNMHTTP.Create(Form1); {плод надо заносить в файлы} FHTTP.InputFileMode := True; {подворачиваем имена ради файлов} i := 1; while FileExists(Form1.Edit1.Text+'\page'+IntToStr(i)+'.htm') do Inc(i); {помогаем , в которые именно файлы класть плод } FHTTP.Body := Form1.Edit1.Text+'\body'+IntToStr(i)+'.htm'; FHTTP.Header := Form1.Edit1.Text+'\header'+IntToStr(i)+'.txt'; {пробуем послать требование } FHTTP.Get(URL); {Перед завершением хода не запускаем освободить память из-под составляющей } FHTTP.Free; end; ПРИМЕЧАНИЕ: Чтобы завершить кое-который процесс (Thread), необходимо вызвать методику Terminate класса этого течения . Приостановить движение можно оператором Suspend, а продолжить выполнение - Resume. Также можно ополчить приоритет произвольного отдельного процесса через особенность Priority. порядочною пример занятия с течениями можно сыскать в подпапке Demos\Threads папки, куда-либо Вы определили Delphi. Замечания по алгоритмам типовых проблем Если Вы коллекционируетесь создать скачивалку сайтов, то Вам нужно учитывать надлежащее (решить должно проблемы): необходимо скачивать не только саму страничку в формате HTML, да и все входящие в нее узоры (gif, jpg, и т.д.); в некоторых происшествиях удобно скачивать не одну страничку, а несколько страниц, высылки на которые находятся на первой из скачиваемых страничек. При этом необходимо учитывать, чисто на страничке могут откапываться и высылки на вторые сайты, почему необходимо анализировать скачиваемые высылки (чтобы невзначай не скачать весь Интернет). Для решения проблемы со скачиванием нескольких страничек нужно употреблять рекурсию; нужно качественно оповещать пользователя о ходе закачки. Т.е. изображать общее и скачанное численность информации; дальше скачивания надобно заменить Интернетовские ссылки на локальные, чтобы можно было просматривать странички в строю offline. Источник: http://www.yandex.ru | |
Просмотров: 2140 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |