Page 56

ПРО

№13 (апрель) 2011

граммист

ЛАБОРАТОРИЯ • InternetOpen

инициирует

работу

массива...

имя Агента НТТР протокола**. Фактически –

символов.

приложения с Интернетом. Здесь задается

это название нашего браузера. Туда можно впихнуть

название просто

любое

города,

набор

имя,

имя

любимого

символов

подружки,

киногероя,

ничего

не

означающих. В эту же функцию передается тип

соединения,

в

нашем

INTERNET_OPEN_TYPE_PRECONFIG, рый

заставляет

реестра

винды

функцию

базовые

случае

получать

котоиз

настройки

Интернета (если не ошибаюсь, речь идет о настройках

Internet

Explorer,

которые

считаются для Windows основными).

Либо же остальные флаги (читайте MSDN) с указанием

прокси-сервера.

Прикинемся

карандашами и будем считать, что проксисерверов у нас либо нет, либо в IE все настроено как надо; • Получив

хендл

сессии

предыдущей

функции, если он верный, можно открывать страницу.

За

InternetOpenURL,

это

ответит

которой

мы

функция

передадим

адрес сайта строкой. Остальные параметры

не особо важны, их можно потом покрутить. Однако я предлагаю обратить внимание на параметр

флага,

в

который

стоит-таки

подставить константу INTERNET_FLAG_

RELOAD, которая заставит винду считать

страницу с сервера по-любому. Страница-то,

байтов,

уместнее

символов...

все-таки Чем

и

байтов

или

займется

Думаю, ANSI

функция

InternetReadFile. Она чертовски похожа на аналог, работающий с файлами. Здесь тоже

нужно указать хендл (в нашем случае то, что

вернула

массив

байт.

InternetOpenURL), Куда

будет

буфер

считываться

поблочно страница. ПОБЛОЧНО. Что дает возможность считывание, ProgressBar,

контролировать

отображая

например.

ход

А

каждое

процесса

также

в

можно

парсить прямиком в ходе считывания, что уже, согласитесь, неплохо;

• Считали? Не забудем закрыть за собой файл, убрав мусор. Чем и займутся функция InternetCloseHandle для файла и для сессии.

Альтернатива этой схеме – функции из той же библиотеки

HttpOpenRequest,

HttpSend-

Request. Всего-то разницы, но они специально предназначены

для

работы

с

http.

Я

предлагаю так: в Дельфи мы воспользуемся функциями InternetOpenURL, а в Си – для разнообразия

HttpOpenRequest.

Какая

разница? Есть разница, но пока что в целом

значения этому придавать не будем. Все. Это основная схема загрузки. Чистый WinAPI без

«прибабахов»

и

жестоких

проделок

с

компонентами. Предлагаю, кстати, заметить на будущее***, как дело обстоит в C#.

может быть, уже кем-то считана на нашей

Loading… 70% remained

Нам это не с руки, потому заставим эту

Итак, думаю направление для движения у нас

машине и хранится у нас локально в КЭШе. страницу перечитаться, игнорируя КЭШ; • Соединение

открыто,

сессия

тоже.

Предыдущая функция дала хендл файла. Теперь можно с ним поступать точно так

же, как с обычными файлами в виндовсе: считывать

поблочно

в

переменную

уже определено, пора сделать первый шаг на пути к истине. И начнем мы шагать, обувшись

в ботинки с названием Delphi. Наша задача сейчас

описать

класс,

способный

по

переданному ему URL загружать основной контент

наделить

WEB-

наш

страницы. класс,

Чем

чтоб

** Первоначально протокол HTTP разрабатывался для доступа к гипертекстовым документам Всемирной паутины. Поэтому основными реализациями клиентов являются браузеры (агенты пользователя). Популярные браузеры (в алфавитном порядке): Epiphany, Google Chrome, Internet Explorer, Konqueror, Mozilla Firefox, Opera, Safari.

же

стоит

загрузка

56

PROgrammist, №13  

Official editorial layout

PROgrammist, №13  

Official editorial layout

Advertisement