DELPHI AND THE INTERNET
by Charlie Calvert
由Boen翻譯,轉載請注明: Translate by Boen.
中文譯稿版權屬Boen所有,使用權歸 CNM 編程版
《第一》
--------------------------------------------------------------------------------
這篇文章主要講述如何使DELPHI和因特網配合工作。本文中將詳述兩個專門技術:
WININET:構建 FTP,HTTP 和 Gopher 用戶端程序
ISAPI:擴充因特網信息服務,例如,獲得服務器上的信息並把它們顯示在浏覽器上。
現今的計算機世界中,由於微軟公司的因特網戰略而掀起了一個巨大發展潮流。那些制作CGI(公共網關接
口)和第三方工具(即使是最基本的因特網工具)的日子將最終一去不復返了。對復雜的第三方工具的需求
總是存在的,但現在程序員將會發現他們所需的大量的嵌入操作系統的因特網工具,簡言之,並不需要進一
步的投資,你就能夠使用免費的DELPHI資源來:
*開發 WEB 浏覽器
*運行 FTP,HTTP 和 Gopher ,在兩個DELPHI應用軟件之間或DELPHI應用軟件和基於TCP(傳輸控制協議)的
服務器之間操作TCP
因為DELPHI能夠輕松地調用Windows API,並且它支持OCX/ActiveX,因此微軟的新戰略和我們的計劃配合
的恰到好處。微軟生產工具,而DELPHI程序員獲得收成!
--------------------------------------------------------------------------------
在本篇中有些什麼?
這篇文章中包含了三個大部分和一些小部分,有三個大主題:
*尋找資料: 那裡能搞到本文中提及的技術資料,而且包含了關於您所需的運行文中代碼的軟硬件的簡短
說明。
*ISAPI:怎樣使用ISAPI
*WININET:怎樣使用WININET
在大多數情況下,本文中的ISAPI和WININET部分是完全獨立的,您可以自由地選擇閱讀時的順序。
--------------------------------------------------------------------------------
查找資料,硬件和軟件的要求
您需要一份Microsoft Windows NT 3.51 Server 或 NT 4.0 Server 的拷貝,其中應附有因特網信息服務
文檔,因為您需要甬道其中所提到的技術。這份文檔應隨NT Server4.0 附送,NT 3.51的用戶可從微軟的
網址上下載。運行Windows NT,您的機器的最低配置應為486兼容,20兆以上內存。
您必須有另一台計算機裝有網頁浏覽器。為使本文中的ISAPI部分能夠順利運行,第二台機器必須能夠運行
所有支持網頁浏覽器的軟件。如果在您的機器上運行的是Windows 95 或 Windows NT,那麼本文中的WININET
代碼片就能運行的最好。任何符合條件的網頁浏覽器在這種技術環境下都能夠使用。
在1996年六月以後發布的Delphi2.0以上的版本中,有您所需的把Delphi連接到因特網上的幾乎全部資源。
如果您沒有最新的Delphi版本[注:此處作者指的是2.0版本(譯者)],那麼您需要本文檔中提到的特殊文
件,所有這些幾乎都可以從萬維網上免費獲得[注:如果您正在使用Delphi2.0以上版本,則不許考慮
(譯者)]。所有本文中提到的技術在Delphi2.0環境下都能順利工作,但在16位Delphi環境下則不一定能
順利工作。
如果您需要從萬維網上下載信息,鏈接為:http://www.borland.com/TechInfo/delphi/index.html
[注:現在已經不存在了!:-(( (譯者)]
Delphi2.0的新版本中附有 WININET.PAS 文檔,如果你的拷貝中不包含它,那麼上面那個萬維網節點可以
為您提供。WININET.PAS包括為擴展微軟視窗因特網所設計的變量清單、函數、類型和屬性。這意味著您能
夠輕而易舉地為您的應用程序增添FTP、HTTP和Gopher支持。微軟公司的WININET.DLL是免費發布的,如果
它不在您的Windows/System 或 Windows/System32 目錄下的話,您可以從微軟公司那裡得到它。下面是可
獲得WININET.H這個視窗幫助文件的萬維網節點:
http://www.microsoft.com/intdev/sdk/docs/wininet/default.htm [注:好象也沒了!:-( (譯者)]
一般來說,微軟因特網開發者的網上之家是微軟節點的 INTDEV 部分。
除了WININET和ICP之外,另一個為Delphi支持的關鍵技術就是ISAP。正如微軟公司文檔中所描述的,這項技
術能使您“‘寫入’服務器端的原本和過濾本,從而擴充微軟因特網信息服務和其他ISAPI萬維網服務”。
如果您需要找到關於ISAPI的描述,可以去:
http://www.microsoft.com/intdev/sdk/servapi.htm [注:上帝保佑您!;-) (譯者)]
在本文最後,附加了一個名為HTTPEXT.PAS的關鍵的ISAPI文檔的拷貝。
微軟公司免費發布的因特網控制包(ICP)是一個OCX/ActiveX控制集,您可以在Delphi中把它們拖放到應用
程序上(Delphi2.0中包含這些控件)。他們提供了創建Delphi應用程序的即時支持,他們知道如何浏覽網頁、
如何應用FTP、WINSOCK和其他因特網技術。如果您的Delphi拷貝中沒有包含這些控件,那麼您在使用它們之
前您應該把這些文檔添加進Delphi所在的目錄中的Lib目錄下。這些文檔位於上面提及的鏈接中的Borland的
INDEX.HTML站點下。在本文中我沒有提到ICP控件,但是任何對這項技術有興趣的人應該明確確認他擁有這些
控件的拷貝。
您可以從我的站點下載我的Pascal應用文件,他們的名字是STRBOX.PAS 和 MATHBOX.PAS。
經常察看一下這個站點上的關於本文提到的信息的更新情況是很有好處的。
在這裡我假設讀者對於Delphi和Object Pascal都很熟悉,並且讀者對於因特網,HTML,浏覽器和萬維網服
務器有基本的了解。
ISAPI
ISAPI是一項很容易使用然而功能強大的技術,它能夠讓您擴充因特網信息服務的功能。這項技術隨WindowsNT
4.0附送,讓您在您的服務器上建立WEB、FTP和GOPHER站點。同時這項技術與WindowsNT3.51 Server[注:指服
務器版本,另一個版本是工作站版本(譯者)]兼容。
在過去,擴充網頁服務器的最佳辦法是建立CGI應用程序。它們是強有力的工具,但是也被他們的執行格式所
限制[注:如PERL是解釋執行的(譯者)]。當您從浏覽其上發出一個基於CGI的請求到服務器上時,這個CGI
應用程序將極有可能先被強制裝入內存中,這會消耗很多時間。而且,在某些環境下,CGI技術顯得稍微難用
了一點。
ISAPI是一種通過寫入DLLs[注:動態鏈結程序(譯者)]從而替代CGI應用的方法。您也可以通過ISAPI來寫
過濾文本,但這項技術我不會在本篇中提及。同CGI相比,ISAPI更容易使用,而且它更快,同時能更好地利
用系統資源。在下面幾點中,我將詳細地介紹為什麼ISAPI DLLs比CGI應用要更為出色:
ISAPI DLLs與HTTP服務位於相同的地址,因此他們能夠從服務器上直接存取HTTP服務。與CGI應用相比,它們
能更快地裝入內存;當他們在服務器上發出請求時,所需的停懸的時間[注:指發出請求到接受服務器應答的
時間(譯者)]要少的多。這點當服務器的負荷很重時更加重要。
您可以控制DLLs何時被裝載和卸載。例如:您可以在第一次嘗試請求時預先裝載DLLs;當它們不被使用時卸載
這個ISAPI應用DLLs以便釋放系統資源。
正如前文所述,您可以利用ISAPI寫過濾文本[注:一般指C/S結構中的腳本(譯者)],更具微軟的文檔,您可
以通過ISAPI過濾文本做下面這些事情:
用戶授權方案
壓縮
加密
登入
通信分析或其他請求分析(例如,尋找 "....etcpassword" 中的請求)
在本文中,我會著重介紹如何編寫返回數據集的DLLs,或者是如何與運行浏覽器的用戶進行簡單的聯系。
ISAPI 基礎
HTTPEXT.PAS文件包含了使用ISAPI的關鍵聲明。這個文件應隨1996年6月以後發表的Delphi版本分發。它也可
以在Borland的站點上找到,在本文的ISAPI部分附有這份文檔。因為這是基於NT的技術,您必須使用Delphi2.0
以上的版本來應用這項技術。您不可能在16位的編輯器上應用它。
HTTPEXT.PAS包含了微軟公司創立的ISAPI技術的接口[注:指Delphi接口,ISAPI由C++編寫(譯者)]。在編寫
Delphi的時候並沒有提供ISAPI的用戶接口,我會僅僅就如何使用微軟公司的現有技術進行描述。不過,ISAPI
太容易使用了,而且對大多數用戶來說,用戶的Delphi對象的版本並不是必須的。
有三個函數可作為ISAPI DLLs的入口,前兩個是必須的,第三個時可選的。
GetExtensionVersion: 進對最低版本做檢查
HttpExtensionProc: 這是DLL的入口,就象是Delphi應用程序中的 begin...end 塊
TerminateExtension: 這是個可選的程序,它可以用作清除其他內存分配的線程。
當您在創建ISAPI DLL的時候,您必須引用上面列出的三個函數中的頭兩個函數,執行這兩個函數是所有ISAPI
編程的關鍵。
這三個語句都包含了“字輸出”,使用這項術語是因為ISAPI DLLs擴充了因特網信息服務器。(記住,因特網
信息服務器指的是微軟服務器。如果您要把一台NT服務器作為體格網頁服務器的話,那麼,這正是您所需的工
具。ISAPI DLLs隨NT4.0分發,在安裝操作系統是自動安裝。)
ISAPI提供了一個制作服務器可遵循的標准。例如,它可以把網景公司的復雜的NSAPI接口壓縮至相關的簡練而
優美的ISAPI來對NSAPI接口進行操作。
下面是這兩個重要函數的聲明
function GetExtensionVersion(var Ver: THSE_VERSION_INFO):&nbs