ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Робота з HTTP протоколом в 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 в заданий каталог

    // Тут йде заголовок файлу і визначення форми TForm1 і її примірника Form1

    // Опис класу окремого процесу

    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.

    Непоганий приклад роботи з процесами можна знайти в підпапці DemosThreads папки, куди Ви встановили Delphi.

    Зауваження за алгоритмами типових завдань

    Якщо Ви збираєтеся створити скачівалку сайтів, то Вам необхідно враховувати наступне (вирішити наступні проблеми):

    Потрібно завантажувати не тільки саму сторінку у форматі HTML, а й усі вхідні в неї малюнки (gif, jpg, і т.д.);

    в деяких випадках зручно викачувати не одну сторінку, а декілька сторінок, посилання на які знаходяться на першій з викачуваних сторінок. При цьому потрібно враховувати, що на сторінці можуть знаходитися і посилання на інші сайти, тому необхідно аналізувати завантажує посилання (щоб випадково не завантажити весь Інтернет). Для вирішення завдання зі скачуванням декількох сторінок потрібно використовувати рекурсію;

    необхідно якісно інформувати користувача про хід закачування. Тобто показувати загальне і викачане кількість інформації;

    після скачування потрібно замінити інтернетівські посилання на локальні, щоб можна було переглядати сторінки в режимі offline.

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.hostmake.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status