《delphi_internet 使DELPHI和因特网配合工作.docx》由会员分享,可在线阅读,更多相关《delphi_internet 使DELPHI和因特网配合工作.docx(31页珍藏版)》请在优知文库上搜索。
1、首页=学习教程=DE1.PHIANDTHEINTERNETbyCharlieCalvert由Boen翻译,转载请注明:TranslatebyBoen.中文译稿版权属Boen所有,使用权归CXM编程版第一部分第二部分第一这篇文章主要讲述如何使DE1.PHl和因特网配合工作。本文中将详述两个专门技术:WININET:构建FTP,HTTP和Gopher用户端程序ISAPI:扩充因特网信息服务,例如,获得服务器上的信息并把它们显示在浏览器上。现今的计算机世界中,由于微软公司的因特网战略而掀起了一个巨大发展潮流。那些制作CGl(公共网关接口)和第三方工具(即使是最基本的因特网工具)的日子将最终一去不复返
2、了。对复杂的第三方工具的需求总是存在的,但现在程序员将会发现他们所需的大量的嵌入操作系统的因特网工具,简言之,并不需要进一步的投资,你就能够使用免费的DE1.PHl资源来:* 开发WEB浏览器* 运行FTP,HTTP和Gopher,在两个DE1.PHl应用软件之间或DE1.PHl应用软件和基于TCP(传输控制协议)的服务器之间操作TCP因为DE1.PHl能够轻松地调用WindoWSAPI,并且它支持OCX/ActiveX,因此微软的新战略和我们的计划配合的恰到好处。微软生产工具,而DE1.PHl程序员获得收成!在本篇中有些什么?这篇文章中包含了三个大部分和一些小部分,有三个大主题:* 寻找资料
3、:那里能搞到本文中提及的技术资料,而且包含了关于您所需的运行文中代码的软硬件的简短说明。* TSAPI:怎样使用ISAPI*WININET:怎样使用WININET在大多数情况下,本文中的ISAPl和WlNNET部分是完全独立的,您可以自由地选择阅读时的顺序。查找资料,硬件和软件的要求您需要一份UiCrOSOftWindOWSNT3.51Server或NT4.0Server的拷贝,其中应附有因特网信息服务文档,因为您需要甬道其中所提到的技术。这份文档应随NTServer4.0附送,NT3.51的用户可从微软的网址上下载。运行WindoWSNT,您的机器的最低配置应为486兼容,20兆以上内存。您
4、必须有另一台计算机装有网页浏览器。为使本文中的ISAPl部分能够顺利运行,第二台机器必须能够运行所有支持网页浏览器的软件。如果在您的机器上运行的是WindoWS95或WindowsNT,那么本文中的WlNINET代码片就能运行的最好。任何符合条件的网页浏览器在这种技术环境下都能够使用。在1996年六月以后发布的Delphi2.0以上的版本中,有您所需的把Delphi连接到因特网上的几乎全部资源。如果您没有最新的DelPhi版本注:此处作者指的是2.0版本(译者),那么您需要本文档中提到的特殊文件,所有这些几乎都可以从万维网上免费获得注:如果您正在使用DelPhi2.0以上版本,则不许考虑(译者
5、)Io所有本文中提到的技术在DeIPhi2.0环境下都能顺利工作,但在16位DeIPhi环境下则不一定能顺利工作。如果您需要从万维网上下载信息,链接为:htlp:WWTechInfodelphiindex,html注:现在已经不存在了!:-(译者)DeIPhi2.0的新版本中附有WININET.PAS文档,如果你的拷贝中不包含它,那么上面那个万维网节点可以为您提供。町NINET.PAS包括为扩展微软视窗因特网所设计的变量清单、函数、类型和属性。这意味着您能够轻而易举地为您的应用程序增添FTP、HnP和GOPher支持。微软公司的WINlNET.D1.1.是免费发布的,如果它不在您的WindoW
6、S/System或WindowsSystem32目录下的话,您可以从微软公司那里得到它。下面是可获得WININET.H这个视窗帮助文件的万维网节点:http术能使您“写入服务器端的原本和过滤本,从而扩充微软因特网信息服务和其他ISAPI万维网服务”。如果您需要找到关于ISAPI的描述,可以去:httpr%在本文最后,附加了一个名为HTTPEXT.PAS的关键的ISAPl文档的拷贝。微软公司免费发布的因特网控制包(ICP)是一个OCX/ActiveX控制集,您可以在DeIPhi中把它们拖放到应用程序上(DeIPhi2.0中包含这些控件)。他们提供了创建DeIPhi应用程序的即时支持,他们知道如何
7、浏览网页、如何应用FTP、WINSOCK和其他因特网技术。如果您的DeIPhi拷贝中没有包含这些控件,那么您在使用它们之前您应该把这些文档添加进DelPhi所在的目录中的1.ib目录下。这些文档位于上面提及的链接中的Borland的IM)EX.HTM1.站点下。在本文中我没有提到ICP控件,但是任何对这项技术有兴趣的人应该明确确认他拥有这些控件的拷贝。您可以从我的站点下载我的PaSCal应用文件,他们的名字是STRBOX.PAS和MATHBOX.PASo经常察看一下这个站点上的关于本文提到的信息的更新情况是很有好处的。在这里我假设读者对于DeIPhi和ObjeetPaSCaI都很熟悉,并且读者
8、对于因特网,HTM1.,浏览器和万维网服务器有基本的了解。ISAPIISAPI是一项很容易使用然而功能强大的技术,它能够让您扩充因特网信息服务的功能。这项技术随WindowsNT4.0附送,让您在您的服务器上建立WEB、FTP和GOPHER站点。同时这项技术与WindowsNTs.51SerVer注:指服务器版本,另一个版本是工作站版本(译者)兼容。在过去,扩充网页服务器的最佳办法是建立CGl应用程序。它们是强有力的工具,但是也被他们的执行格式所限制注:如PER1.是解释执行的(译者)。当您从浏览其上发出一个基于CGl的请求到服务器上时,这个CGl应用程序将极有可能先被强制装入内存中,这会消耗
9、很多时间。而且,在某些环境下,CGT技术显得稍微难用了一点。ISAPl是一种通过写入D1.1.S注:动态链结程序(译者)从而替代CGl应用的方法。您也可以通过ISAPl来写过滤文本,但这项技术我不会在本篇中提及。同CGl相比,ISAPl更容易使用,而且它更快,同时能更好地利用系统资源。在下面几点中,我将详细地介绍为什么ISAPlD1.1.S比CGl应用要更为出色:ISAPID1.1.S与HTTP服务位于相同的地址,因此他们能够从服务器上直接存取HTTP服务。与CGl应用相比,它们能更快地装入内存;当他们在服务器上发出请求时,所需的停悬的时间注:指发出请求到接受服务器应答的时间(译者)要少的多。
10、这点当服务器的负荷很重时更加重要。您可以控制D1.1.S何时被装载和卸载。例如:您可以在第一次尝试请求时预先装载D1.1.s;当它们不被使用时卸载这个ISAPl应用D1.1.s以便释放系统资源。正如前文所述,您可以利用ISAPl写过滤文本注:一般指C/S结构中的脚木(译者),更具微软的文档,您可以通过ISAPl过滤文本做下面这些事情:用户授权方案压缩加密登入通信分析或其他请求分析(例如,寻找.etcpasswordz,中的请求)在本文中,我会着重介绍如何编写返回数据集的D1.1.s,或者是如何与运行浏览器的用户进行简单的联系。ISAPI基础HTTPEXT.PAS文件包含了使用ISAPl的关键声
11、明。这个文件应随1996年6月以后发表的Delphi版本分发。它也可以在BorIand的站点上找到,在本文的ISAPl部分附有这份文档。因为这是基于NT的技术,您必须使用DCIPhi2.0以上的版本来应用这项技术。您不可能在16位的编辑器上应用它。HTTPEXT.PAS包含了微软公司创立的ISAPl技术的接口注:指Delphi接口,ISAPl由C+编写(译者)o在编写Delphi的时候并没有提供ISAPI的用户接口,我会仅仅就如何使用微软公司的现有技术进行描述。不过,ISAPl太容易使用了,而且对大多数用户来说,用户的DeIPhi对象的版本并不是必须的。有三个函数可作为ISAPlD1.1.S的
12、入口,前两个是必须的,第三个时可选的。GetExtensionVersion:进对最低版本做检查HttpExtensionProc:这是D1.1.的入口,就象是DeIPhi应用程序中的begin.end块TerminateExtension:这是个可选的程序,它可以用作清除其他内存分配的线程。当您在创建ISAPlD1.1.的时候,您必须引用上面列出的三个函数中的头两个函数,执行这两个函数是所有ISAPI编程的关键。这三个语句都包含了“字输出”,使用这项术语是因为ISAPlD1.1.S扩充了因特网信息服务器。(记住,因特网信息服务器指的是微软服务器。如果您要把一台NT服务器作为体格网页服务器的话
13、,那么,这正是您所需的工具。ISAPlD1.1.S随NT4.O分发,在安装操作系统是自动安装。)ISAPl提供了一个制作服务器可遵循的标准。例如,它可以把网景公司的复杂的NSAPl接口压缩至相关的简练而优美的ISAPl来对NSAPI接口进行操作。下面是这两个重要函数的声明functionGetExtensionVersion(varVer:THSEVERSIONINFO):BOO1.;Stdcall;functionHttpExtensionProc(varECB:TExtensionControlBlock):DWORD;Stdcall;您只要把GetEXtenSionVerSion粘贴到您
14、的D1.1.s救行了.当ISAPl向公众发布新版本时您只需要做轻微的改动。functionGetExtensionVersion(varVer:THSEVERSlONNFo):BOO1.;Stdcall;beginVer.dwExtensiOnVersion:=$00010000;/1.0supportVer.IpszExtensionDesc:=,Delphi2.0ISAPID1.1.*;/DescriptionResult:=True;end;TheparameterpassedtothisfunctionisdeclaredinHTTPEXT.PASasfollows:有关的参数在HTTPEXT.PAS中声明如下:PHSE_VERSION_INFO=THSE_VERSION_INFO;THSE_VERSION_INFO=packedrecorddwExtensionVersion:DWORD;IpszExtensionDesc:array0.HseMaxExtD1.1.Name1.en-IofChar;end;常量HseMaxExtDllName1.en在声明中的值为256。纪录中的这两个变量是“自声明”的,前一个包含了ISAPl的版本号注:即变量ChvExtensionVersion(译者),后一个则表示用户定义的一个用来