Bob Swart - Интернет решения от доктора Боба
- Название:Интернет решения от доктора Боба
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Bob Swart - Интернет решения от доктора Боба краткое содержание
Интернет решения от доктора Боба - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
begin
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
end
end
end;
writeln('
Hits | Title | Author | Publisher | ISBN | Level | Con | Wri | Val | Tot |
---|---|---|---|---|---|---|---|---|---|
',Roman[Hits],' | ',Book32[i].Title,' | ',Book32[i].Author,' | ',Book32[i].Publisher,' | ',Book32[i].ISBN,' | ',Level[Book32[i].Level],' | ',Book32[i].TechnicalContentsQuality,' | ',Book32[i].QualityOfWriting,' | ',Book32[i].ValueForMoney,' | ',Book32[i].OverallAssessment,' |
',Roman[Hits],' | ',Book16[i].Title,' | ',Book16[i].Author,' | ',Book16[i].Publisher,' | ',Book16[i].ISBN,' | ',Level[Book16[i].Level],' | ',Book16[i].TechnicalContentsQuality,' | ',Book16[i].QualityOfWriting,' | ',Book16[i].ValueForMoney,' | ',Book16[i].OverallAssessment,' |
');
writeln('
');
writeln('Dr.Bob''s Delphi Clinic');
writeln('
');
writeln('
');
writeln;
Free
end
2.2.11. Отладка CGI
Страницу HTML с результатом, сгенерированную по запросу мы модем увидеть выполнив CGI приложение. Для этого требуется (персональный) Web сервер. По этому я написал небольшую программу отладки, используя Delphi 2.01 и NetManage HTML control:
2.2.12. Заключение
Я надеюсь, что я показал, как мы можем писать интерактивные Интернет (Интранет) CGI приложения с помощью Delphi 2 используя CGI, WinCGI и Delphi 3 ISAPI/NSAPI Web Modules. Лично я планирую делать многое с помощью Дельфи для Интернет и Интранет.
3. Microsoft WinInet
Многое из того, что вы узнали, позволяет вам писать Интернет приложения с помощью Delphi. Особенно с помощью новых средств в Delphi 3 таких как ActiveForms и Web Modules. Но иногда мы хотим сделать, что еще быстрее и проще. Иногда мы просто хотим загрузить файл из Интернета. В терминах Интернета это означает, что мы хотим использовать FTP (file transfer protocol) клиента. И если вы верите мне, то вам не требуется ни какой FTP клиент, но если вы верите мне, то вы можете написать свой…
3.1. FTP
Как я сказал во введении, FTP означает File Transfer Protocol, который описан в RFC 959. Модель связи FTP может быть реализована с помощью сокетов, но это более низкоуровневое решение и если вы посмотрите спецификацию, то поймети, что написание программы FTP клиента с нуля не такая уж простая задача. С другой стороны, мы можем использовать NetManage TFTP компонент из Delphi 2.01 (и выше) и C++Builder. Я пробовал использовать этот компонент несколько раз, и нашел его просто глюкавым, особенно для файлов свыше 10 Kb. Я могу понять, почему Microsoft (первый разработчик Internet Solutions Pack) не захотела использовать его и продала затем NetManage, которая тоже не справилась с ним и продала далее фирме NetMasters. Проблема в том, что Internet Solutions Pack – хотя и бесплатный – основан на наборе с ограничениями ActiveX, и каждая компания которая использует его также имеет более лучшее решение (обычно не бесплатно). Поддержка и документация всегда отвратительная…
Так что же, назад к низкоуровневому программированию? Ни в коем случае. Как всегда на помощь приходит Microsoft
3.2. WinInet
Некоторое время назад, Microsoft выпустила WinInet, который ни что иное как промежуточный слой между высоким и нижним уровнем программирования Internet API специально для Win32 программистов. WinInet Является интерфейсом высокого уровня для протоколов нижнего уровня, таких как HTTP и FTP. Использование его действительно просто, и хорошо, что модуль WinInet.PAS с API определениями уже включен в Delphi 2.x и выше!
Имеется также большой документ, описывающий все детали WinInet API, который может быть найден на сайте Microsoft (но его местонахождение постоянно меняется, так что нужно использовать систему поиска, для загрузки последней версии документа).
От переводчика: можно взять на моем сайте со страницы http://nps.vnet.ee/internet.html
3.3. DrBob FTP
WinInet использует не что, что они назвали Интернет хендл " internet handle " (очень похоже на windows handles), и все api функции или нуждаются или возвращают Интернет хендл. Например, что бы открыть новую WinInet сессию, нам нужно вызвать функцию InternetOpen, которая вернет Интернет хендл, который мы должны использовать до конца сессии (и передавать другим API функциям). Для освобождения хендла, мы всегда должны вызывать функцию InternetCloseHandle (после получения хендла мы можем его использовать, но мы обязаны написать блок try-finally, где должны освободить хендл в разделе finally).
Для открытия удаленного файла (или URL) в Интернете, мы должны вызвать функцию InternetOpenURL, которая опять вернет нам хендл. Теперь, для загрузки удаленного файла (URL) на нашу локальную машину, нам осталось сделать только некоторое количество вызовов функции InternetReadFile, очень похожей на функцию BlockRead, которая копирует данные из удаленного файла в буфер данных. Мы можем использовать BlockWrite для записи из буфера в локальный файл, и все это с помощью всего лишь трех WinInet функций (четыре, если считать функцию InternetCloseHandle), мы можем написать простую, но очень быструю FTP программу следующим образом:
programDrBobFTP;
{$APPTYPE CONSOLE}
{$I+}
uses
Windows, WinInet;
procedureCopyURL( constURL, OutputFile: String);
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: Array[0..Pred(BufferSize)] ofByte;
BufferLength: DWORD;
f: File;
begin
hSession := InternetOpen('DrBob',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
try
hURL := InternetOpenURL(hSession, PChar(URL), nil,0,0,0);
try
Assign(f, OutputFile);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, BufferSize, BufferLength);
write('.');
BlockWrite(f, Buffer, BufferLength)
untilBufferLength = 0;
Close(f);
writeln('OK') { if we get here, we succeeded }
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
begin
ifParamCount <2 > then
begin
writeln('Usage: DrBobFTP URL Filename');
writeln('Example: DrBobFTP http://www.drbob42.com/ftp/headconv.zip hc.zip')
end
else
CopyURL(ParamStr(1), ParamStr(2))
end.
Конечно, для выполнения данной программы мы также обязаны иметь WinInet.DLL, которая также может быть найдена на Microsoft web сайте.
3.4. Web Magic
Теперь вы уже знаете что, мы можем писать мощные Интернет приложения любого сорта с помощью Дельфи. Тем не менее, я как web мастер популярного web сайта, я очень часто чувствую нужду в приложениях поддержки; инструменте который бы мне помог обслуживать мой web сайт. Например, счетчики, гостевые книги, детектор мертвых ссылок, автоматический аплоадер (для публикации новых страниц) и даунлоадер (для автоматического получения файлов с сети).
Читать дальшеИнтервал:
Закладка: