说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Internet编程技巧-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
Internet编程技巧-Delphi资料

在Delphi中调用NetscapeNavigator。

随着Internet的火爆,有没有想过在你的Delphi程序中启动Netscape浏览器,显示出你指定的WWW地址的主页。下面这个程序能够完成这一功能。

programNetscape;

usesDDEMan;

procedureGotoURL(sURL:string);

var

dde:TDDEClientConv;

begin

dde:ΚTDDEClientConv.Create(nil);

withddedo

begin

//specifythelocationofnetscape.exe

ServiceApplication:Κ′c:ιns32ιprogramιnetscape.exe′;

//activatetheNetscapeNavigator

SetLink(′Netscape′,′WWW—Activate′);

RequestData(′0xFFFFFFFF′);

//gotothespecifiedURL

SetLink(′Netscape′,′WWW—OpenURL′);

RequestData(sURL+′,,0xFFFFFFFF,0x3,,,′);

CloseLink;

end;

dde.Free;

end;

begin

GotoURL(′http://www.yahoo.com/′);

end.

Delphi开发Web Server程序响应用户的输入

随着Internet/Intranet的飞速发展和普遍应用,对在Internet/Intranet上的应用程序的需求越来越多,于是Java和ActiveX Form应运而生,但是,现在Internet的带宽还非常低下的情况下,这种基于Client端的应用是非常困难的,下载一个非常小、功能非常简单的Java Applet就需要非常长的时间,而且还存在着用户使用浏览器不支持这种新技术的可能。在这种情况下,基于服务器的CGI,Win-CGI,ISAPI/NSAPI还是一种主要的方式。使用Delphi 3开发Web Server程序是非常简单的,Delphi 3中提供了大量的元件和对象,支持Web Server程序的开发。

在Delphi 3的Demos中提供了简单的Web Server程序开发的例程,本文主要集中在此例程中没有涉及到的响应用户输入的问题。

HTML中用户输入主要是 例如(查询某人的电话号码):

姓名:

在这个例子中使用了POST方法。那么在Web Server应用程序中,如何得知用户的输入信息呢?

在HTTP协议中,客户端向Web Server应用程序返回数据主要是通过URL和CONTENT部分。例如URL中:http://www.delphi.com.cn/dfyw/cgi-bin/delinfo.exe?id=10,这里,id=10数据参数,告诉delinfo.exe显示从ID=10开始的信息,这一般应用在数据量较少的情况下,优点是比较容易输入参数,缺点是数据量不能太大,并影响URL的显示。在CONTENT中保存数据信息的优点是不影响URL的显示,而且数据量较大,缺点是用户只能使用 除了POST方法使用CONTENT部分返回数据以外,其它方法都是通过URL来返回数据的。

Delphi中有TWebRequest对象,这个对象将HTTP返回的信息进行分析,非常容易使用。对于CONTENT中的数据,TWebRequest使用ContentFields,将数据分析成为一个TStrings,可以直接使用Request.ContentFields.Values['name']来都取数据。而URL中的数据,TWebRequest使用QueryFields,也将数据分析成为了一个TStrings,可以直接使用Request.QueryFields.Values['name']来读取数据。

例如上面的HTML返回的消息处理:

if Request.ContentFields.Values['name']<’’ then

Response.Content:= Request.ContentFields.Values['name']

+’的电话号码是:’+QueryTelCode(Request.ContentFields.Values['name'])

else

Response.Content:=’请输入用户名’;

Delphi 3中Cookie的建立使用:

Cookies是一种Web服务器在客户端存储和返回信息的机制

这种简单的、永久的和基于客户端的状态信息大大的扩充了基于Web的客户/服务器(Client/Server)应用程序的能力。因此广泛应用在大量的实际中,例如所有订阅Microsoft公司的MSDN的用户、访问过Borland Online的用户,以及访问过我的主页(http://www.nease.net/~borland)的用户都会在本地存储Cookie,以便下次访问时提供上次访问的记录。

Delphi 3是Borland公司1997年推出的可视化、面向对象的高效率的快速应用程序开发工具(RAD),提供了大量的最新功能,例如开发COM/DCOM,一步开发ActiveX对象,多层数据库应用程序MIDAS等,并且使用Delphi 3开发基于Web服务器的程序,如ISAPI/NSAPI,Win-CGI,CGI程序都十分方便。

使用Delphi 3开发Web Server程序是非常简单,方便的,因为在Delphi中提供了Web Module、TWebApplication、TWebRequest、TWebResponse、TPageProducer等大量的对象供使用.对于Cookie

Delphi3也提供了大量的程序供使用

如TWebResponse.Cookies,TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields,TWebRequest.ExtractCookieFields等,应该是非常方便。但本人为了实现一功能需要设置Cookie,但是发现使用Delphi提供的SetCookieFields设置不成功,经研究Delphi 3所带的HttpApp.Pas和IsapiApp.Pas文件发现在中文Windows 95和NT环境下该程序有错误。

根据Netscape公司的规定

Cookie的格式应为:

Set-Cookie: Name=Value; expires=DATA; Path=PATH; domain=DOMAIN_NAME; secure

而且根据规定

日期(DATA)的设置必须满足格式“Wdy

DD-Mon-YYYY HH:MM:SS GMT”

基于RFC822

RFC850

RFC1036和RFC1123等规定,但是检查HTTPAPP.PAS中的function TCookie.GetHeaderValue: string中为FormatDateTime('"expires="' + DateFormat + ' "GMT; "'

Expires);

其中const DateFormat = 'ddd

dd mmm yyyy hh:mm:ss'

此程序在英文环境中产生的格式是正确的

但是在中文中产生的结果却不对

因为星期和月份都将按照中文的表示方法:如将11月生产“十一月”中文串,这样在Netscape Navigator和Microsoft Internet Explorer就不能辨认了。

既然错误在于原VCL未考虑中文环境的问题,所以修改的方法有:1、修改VCL源程序,编译后将dcu文件拷贝到Lib目录,这样会完全改正错误,这样是最根本的解决方法,但是如果将源程序放在另一未修改的Delphi中(例如提供源程序给别人和自己重新安装)编译又将出现问题。2、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用Delphi 3提供的TWebResponse.SetCustomHeader设置

这样的好处是将程序放在自己的程序内,重新装Delphi或在另一台计算机上编译的结果也会完全正确。因为Cookie的目的一般有两种,一种是在此会话过程中使用,过后不使用,此时不需要Expires段,不会产生时间错误,可以使用Delphi 3提供的所有Cookie程序;另一种为永久保存,时间一般越长越好,于是可以将时间设置为2099年二月22日

于是程序中设置Cookie的方法为:

Response.SetCustomHeader('Set-Cookie'

'Name=Value; expires=Sun

22 Feb 2099 08:08:08 GMT'); (注斜体用自己的名称代替,例如设置Count=10,则Name用Count代替,Value用10代替),这样就可以建立Cookie了.

以下为建立一个访问计数器的程序,可以参照:

const

LastIp:String='0:0:0:0'; //避免重复计数

Var

S:String;

Count:Integer;

begin

S:=Request.CookieFields.Values['count'];

if S<'' then begin

try

Count:=StrToInt(S);

Except

Count:=0;

End;

end else Count:=0;

if LastIp LastIp:=Request.RemoteAddr;

Response.SetCustomHeader('Set-Cookie'

'count='+IntToStr(Count)+'; expires=Sun

21 Feb 2010 08:08:08 GMT');

Response.Content:='您是第'+IntToStr(Count)+'来到本页!';

End;

谷歌哭了:Replicant 4.0 SDK发布搅乱大局 忍者神龟与禅宗启示:如何突破移动广告困境 Linux会是更好的游戏平台?暴雪是这么认为的! 新型恶意软件瞄准Java服务器 AWS被纳为“战略物资”市值或可达到300亿美元? 十张图带你入门Map/Reduce 低端Android野心,Intel发布Atom Z2420处理器 淘宝网的技术发展史(一)——个人网站时代 看Pinterest如何通过架构变化将EC2成本降低了62% 内容vs渠道:法国电信商Free叫板Google 让网站成为应用:Firefox OS掀起革命风潮 屌丝伞兵的逆袭:4人+盛大+远程+最佳手游 新年头彩:Chartboost喜获1900万美元融资 高富帅跻身移动领域 福特开放车载声控API 传低端iPhone最低只要99美元 你怎么看? 辉煌不再 Encanto超级计算机可能被拆分“出售” 知己知彼 企业应用移足云端必须清楚的10大方面 NVIDIA推Android掌机:七年孕育可否成就野心? 人民日报:2013关于新媒体的8个猜想 互联网大时代成就创新小企业 移动互联网创新论坛报道 Mobile Detect:判断移动设备类型的开源PHP类 我是如何Hack Facebook Employees Secure Files Transfer服务的 投资可再生能源:Google 2亿美元投资风力农场 构筑商业生态系统 阿里巴巴集团全面变革组织架构和管理体系 美国众多银行网站遭DDoS攻击 疑似伊朗所为 构建高可扩Web架构和分布式系统实战 CES2013 AMD发布移动处理器路线图和环绕计算概念 对话Linus Torvalds:大多黑客甚至连指针都未理解 PaaS玩家们,怎么演好自己的角色? Apple高管表态:低端机绝不是iPhone的未来 Web开发人员应该知道的IE 10兼容性问题 如何改变当前打印机的纸型? 请问在WINXP下的怎设置IIS? 我在用 DataReport 控件对数据库进行输出时 为什么运行时总是弹出选择数据库的对话框? 这个数据库连接不是已经设置好了吗? 怎样取消textbox的凹凸感? 为什么在IE6 中使用Ctrl+Shift组合健得到的连接是http://www.china.co.cn 为什么总是出现Invalid BLOB handle in record buffer错误 大家晚上好,怎么让我的程序里有一小块是网页的内容呢?(全部家档!!) 关于Database和Session的问题!火急!(快乐的程序员) jsp+mysql如何在linux上配置 有知道黑龙江高程查分方法的吗????? *******我要一个这样的类:显示淡入淡出的菜单(最好还能有半透明的功能) *************** 特急,各位帮忙。怎么样在字符串中包含'(单引号)? 高分求助用paradox数据库保存JPEG图片的代码,我试过网上好多都没成功。markoni@21cn.com 吴文智、袁飞、Jinesc、Jneu、Amoon、ttyp、icevi、progame 快请进 请教一个表与表之间比较数据的问题,由于数据量大,造成事务不够,请教解决方案 execcommand的使用方法求救。高手请进,一定给分。 我的时钟怎么回事? Matlab论坛 打印机的取消按钮 dbgrid中当某个单元格失去焦点时触发什么事件? 关于Database和Session的问题!火急! yanxu1 学习unix下的c编程,该如何学?请介绍方法,资料什么的--我对unix和c都还熟悉。 打印机死机作何解?????? 我是新来的,请各位大哥、大姐们多多关照!!!(有内容) 再次发问关于sql server7的问题?? SQL SERVER中的一个触发器的问题!!! xml里有什么method可以取得子节点在父节点中的位置(序号)? please help me 怎么样才可以把系统存储过程的结果写到结果集里? 如何声明和使用自定义对象(如:Tdataset)的事件(beforecancel)?? 一个奇怪的问题? 各位兄弟,谁知道哪里有pb7的下载? 天呐 我提的问题从来没人回答 SQL Server小小问题 请问那里有DELPHI第二张光盘下载! 如何是使用describe来获取datawindow中的带区参数? 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!! 请问C语言中有字符串查找函数吗? 请问如何动态的改变应用程序的图标,一定给分 Query主从表编辑问题,从不丢失! 急急急!!!! 高分求禁止IE的自动谈出的广告,有个软见也行,或者告诉实现方法。请告诉下载的网址。 打印一些清单在delphi中用哪些控件比较好? 如何打印到文件 如何得到WINDOWS的拼音字库 如何在BCB中进行SDK编程? 一个简单关于对话框的问题------->> 用asp将图片插入数据库,到底错在哪?苦恼啊!以前这个也通过了(win2000server+Sql7.0)但...(高分!!!!) 为什么我在Access2000的mdb中只能最多得到一条记录? 男人25岁就大吗? 关于 C 类IP的屏蔽 一堆煤,第一次运走了总量的4分之1还少3吨,第二次运了余下的3分之1还多2吨,第三次运走了在余下的2分之1,还剩10吨,这堆煤原有几吨? 某大楼地上共有12层,地下共有4层,某人乘电梯从地下3层地上7层,电梯一共升了多少层?要列式 一个长方体,它的高和宽相等,若把长去掉2.5厘米,就成为表面积是150平方厘米的正方体.长是宽的几倍? 连接A,B两城的高速公路,全长120km,在AB上建有两个收费站C和D,已知AC:DB=11:1`,一辆小汽车从站行驶3/4h, 一个长方体,它的高和宽相等,如果把长去掉2.5dm,就是成为一个表面积150平方分米的正方体.原长方体的体积是多少立方分米? 一个长方体的高和宽相等,若把长去掉2.5厘米,就成为表面积是150平方厘米的正方体.原来长方体的体积多少 方舟子靠什么赚钱 一个长方体,它的高和宽相等,如果把长去掉2.5dm,就成为一个表面积是150平方分米的正方体.这个长方体的长是宽的几倍?要算式 一个长方体,它的宽和高相等,如果把长去掉2.5厘米,就成为一个表面积是150平方厘米的正方体.那么原来长 一个棱长1cm的正方体拼成长方体的表面积事多少平方厘米? 一个长方体去掉俩分米后,这个长方体就变成了正方体,表面积就减少了48平方米,原来长方体表面积是多少? 王叔叔在加油站加了40升汽油,开车去距离加油站200千米的省城办事.每升油行驶8千米,到达省城时还剩下多少升油 把3个棱长是1cm的正方体拼成一个长方体,这个长方体的表面积比三个正方体的表面积和减少了( )平方厘米快 来此购~急 5.长方体体积的计算方法一个长方体,它的高和宽相等,如果把长去掉1.6分米,就成为一个表面积216平方分米的正方体.原长方体的体积是多少立方分米?6.正方体体积的计算方法把一块棱长6cm的正 6、司机王叔叔在加油站加了30升油后,去距离加油站180千米的公司去办事,按每升汽油可行驶8千米计算,要想着回来还需要加多少升汽油? 某大楼地上共有12层,地下共有4层,8米,请用正负数表示.这栋楼每层的楼 转基因食品的好处有那些举例说明!最好短一点!举例说明!举例说明! 汽车消耗1升汽油可行驶6.4千米.已经加了45升气油,去距离加油站15O千米的地方,往返一次,汽油够用吗?为什么? 某大楼共有12层,其中地下有4层,请用正负数表示这栋大楼每层的楼层数( )某人从地下2层乘电梯到地上8层,电梯一共开了几层? 转基因食品有什么优点? 方舟子为什么要批评钱学森是伪科学家?两弹一星是方舟子造出来的? 我国的转基因农作物的了解 转基因食品有哪些好处? 12.某超市为“开业三周年”举行了店庆活动.对 、 两种商品实行打折出售.打折前,购买5件 商品和1件 商品 高速公路建设正在招标,现有甲乙工程队竞标.若甲乙两队合作24天可以完成,需费用120万元;若甲乙两队合作20天后,剩下由乙对做,还需40天才能完成,共需费用110万元.问:(1)甲、乙两队单独 转基因食品有什么好处?各位谁能告诉我啊``` 超市为“开业三周年”举行了店庆活动.对AB两种商品实行打折出售.打折前,购买5件A商品和一件B商品需要84元;购买6件A商品和三件B商品需要108元.而店庆期间,购买50件A商品和50件B商品仅需960 正在修建中的某段公路在招标,现有甲乙两个工程队,若甲乙两队合作,24天可以完成,需要费用120万元;若甲队独做20天,剩下的工程由乙队做,还需40天完成,这样需要费用110万元,问:1.甲、乙两个 转基因食品的优势 某超市为“开业三周年”举行了店庆活动,对A、B两种商品实行打折出售,打折前购买5件A商品和1件B商品需用84元;购买6件A商品和3件B商品需用108元,而店庆期间,购买50件A商品和50件B商品仅需960 正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万,若甲单独作20...正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万, 某仓库有16.8吨大米第一次运出大米7分之一,第二次运出余下的4分之3.一共运出多少吨? 把一个长为2×10的3次方分米,宽为4×10的2次方分米,高为80分米的长方体废水池中的废水注入正方体储水池净化,已知正方体储水池的棱长为5×10的2次方分米,这些废水能否一次注入到储水池内净 正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万元;若甲单独做20天后剩下的工程由乙做,还需40天完成,这样需费用110万元,问:(1)甲、乙两队单独完成 一辆汽车正常行驶100km,消耗汽油5kg,一只该车的油箱为40L,给油箱装满汽油时,该汽车可正常行驶多远?如果正常行驶的速度是70km/h,一箱汽油可供该汽车正常行驶多少小时 市环保局将一个长为2×10的6次方,宽为4×10的4 次方分米,高为8x10的2次方分米的长方体废水池注入一个正方体贮水池进行净化,请你通过计算考虑,能恰好有一个边长为整数的正方体贮水池,正好 26、正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万元;若甲单独做 一个长方体它的宽和高都相等,如果把长去掉2.5cm,就成一个表面积150平方厘米的正方体,那么原来长方体体积?那么原来长方体的体积是多少立方厘米 一辆汽车的油箱长50厘米,宽40厘米,高30厘米.如果每升汽油可以行驶10千米,当行驶400千米后,油箱里大约还剩下多少千克汽油?{已知每升汽油重0.82千克} 一个长方体它的宽和高相等如果把长去掉2.5cm就成为一个表面积150cm的平方的正方体,长是宽的几倍 方舟子的博客里为什么自称总是用方舟子?比如方舟子说如何如何,方舟子被打如何如何,为什么不用“我”“本人”之类?让人看了觉得很不舒服.难道方舟子的博客是专门有枪手捉刀的么?如果 方舟子是谁 一个长方体它的宽和高相等,如果把长去掉2.5cm,就成为一个表面积150cm的平方的正方体,那么原来长方体积是多少立方厘米? 甲乙店矿泉水促销,甲店买2大瓶送1小瓶,乙店一律打八折,买大瓶8元,小瓶2.5元,买4大瓶、2小瓶,哪个商店更经济?为什么? 对的方舟子评价一下我个人挺喜欢方舟子的,他正义,实事求是.看见好多网友的评论有表扬的也有批评的,批评声中不乏文采超好的人.方舟子有错吗?只不过说了真话而已. 一个长方体它的宽和高相等,如果把长去掉2.5cm,就成为一个表面积150cm的平方的正方体,那么原来长方体体积是多少立方厘米 小桃去商店为美术小组买宣纸和毛笔,宣纸每张2元,毛笔每支15元,商店正在搞优惠促销:买一支毛笔送一张宣纸.小桃买了10支毛笔和x张宣纸,那么小桃用的总钱数y(元)与宣纸张数x(张)之间的函数 把60升的水倒入一个棱长为5dm的正方体水箱中,水深()dm 有一个长方体的表面积是150cm²,沿截面刚好锯成7个完全相同的正方体,求每个正方体的表面积.希望加上解题思路. “绿满梅州”活动中,某镇要从外地运一批树苗,第一次运了520棵,第二次运了总数的5/12,两次共运了总数的85%.两次共运树苗多少棵? 把100升的水倒入一个棱长为5dm的正方体容器里,水的高度是多少dm? 有一段长340米的马路,要在这条马路的两侧植树.从一端为起点,每隔8.5米中一棵树,一共要种多少棵树 仓库里有60吨钢材,第一次用去总数的五分之一,第二次比第一次多用四分之一.第二次用了多少吨 一批货物共100吨,第一次运了总数的1/4,第二次运了总数的1/5,第一次比第二次多运多少吨?两次共运多少吨? 在一条长600米的公路两边植树,要求每边都每隔3米栽一棵树,如果从公路的起点栽起,一直栽到终点,一共需要多少棵树苗? 高速公路限速120KM 我跑了123KM要罚款吗?也就是在同一个地方我被拍了3次,都是超过3-5KM,我打电话问过12122,他们的解释是120KM以上的话超过1KM都要罚款,我问不是超过%20才罚款吗,交警的回答是限 一个长方形,它的长和高相等,如果把长去掉2.5厘米,就成为表面积是150平方厘米的正方体,原长方体的体积是多少? 把四个棱长是1cm的正方体,拼成一个长方体,拼成的长方体的表面积.最小是()cm2 线段AB是连接A,B两城市的高速公路,全长300km,在AB上建有一个休息处C,已知AC:CB=7:3,一辆客车的速度是70km/h,请你求出这辆客车从A到C所用的时间. 把一个长方体的长去掉4cm,成了一个正方体,表面积减少了64平方厘米,这个长方体原来的体积是多少?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn