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

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;

英雄会晚宴,Top开发者共聚“华山之巅” 【MDCC 2015】产品与设计专场(上):百度研究院、印象笔记等专家齐聚,以实例探讨如何打造好产品 【MDCC 2015】产品与设计专场(下):网易云音乐、在行、三节课、去哪儿网、野兽骑行大咖的产品之路 友盟:把数据用活 让开发者享受大数据红利 友盟:用活大数据 让精细化运营为移动开发者服务 携手世纪互联 IBM Bluemix云平台落地中国 【MDCC 2015】IoT峰会—硬件开发与技术专场(下):专家齐聚,共同打造联网新时代 【MDCC 2015】虚拟现实专场(下):虚拟现实的“困”与“竞” 【CTO讲堂】面对世界竞争对手,如何拿到Google PDF开源项目PDFium? 提升网站性能开发的10个技巧 SDCC 2015:顶尖技术精英云集 大会日程及首批讲师议题公布 《近匠》专访猿团创始人CEO谢恩明:梦想、未来、改变 《近匠》专访小熊尼奥:从软硬结合到IP合作,AR产品的机遇 W3C启动Web支付标准工作,推进在线结算流程 W3C中国区会员沙龙在京召开 W3C CEO Jeff分享W3C未来发展重点 【SDCC讲师专访】车轮互联总架构师韩天峰:PHP是最好的编程语言 SDCC 2015讲师专访精彩集锦(一):你想知道的,都在这! (入门篇)带你走进Erlang 【大神来了】Elixir语言设计者Jos&#233; Valim:释放Erlang VM的能量 【SDCC 2015讲师专访】刘小溪:Vert.x3的异步框架实战 【CTO讲堂】支付接入开发的陷阱有多深? 程序员界“香饽饽”、大神级别人物集体亮相——SDCC 2015编程语言专场议题曝光 【CTO沙龙】CDN在共享经济下的创新应用 深入浅出Fetch API 带你入解应用场景及适用问题 SDCC 2015讲师专访精彩集锦(二):途牛网、饿了么、快的等大牛都来了 百度、饿了么、美团专家齐聚SDCC2015,剖析前端开发核心技术 【SDCC讲师专访】百度乔刚:前端可视化难点分析及探索实践 【CTO讲堂】Growth Hacking背后,数据分析平台的架构调整 BAT、巨杉、南大、柏睿等齐聚SDCC—新一代数据库专场议题曝光! 《近匠》BeeCloud创始人黄君贤:三行代码集成支付的技术实现 【SDCC讲师专访】AdMaster技术副总裁卢亿雷:分布式数据库挑战与分析 dcc32如何使用? 大哥,大姐们,这到题没分给,但我真的想知道答案 求对VSS或者Team Source开发的例子 科鼎校园网V2.3测试版网上演示 关于 WINDOWPLACEMENT Structure 关于用DELPHI联接ACCESS数据库怎样使用insert命令的问题(很急很急)加分多多!!! 学c#要那些知识前提。 请问新建怎么做? 为什么在excel表中可以看到的数字,用data连接后,在text和dbgrid中却看不到。(只显示出了其中的一部分) 简单问题,关于toolbar CTime类型变量的值存到数据库中datetime类型的小问题! vc怎样打开access数据库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !求助,我的机子不能启动了。。。 XML中华网有好多的C#资料哦! 比较问题一道,关于 == 版主请进 ~ CrystalReport的一个奇怪的问题,Help! 唉,终于解决不了了,如何在运行时,改变LISTBOX的风格。MSDN说不能解决 AnsiString与TStrings之间的区别与联系,急! 有谁知道下载cobol的编译器,能在window下用的 各位兄弟、姐妹,谁能给我一个超星的账号阿!!谢谢了 再请教 Delphi的EXE 请问关于数组的问题 机器的速度太快,玩不了挖金子,有什么办法? web应用中使用Window ActiveX OCX技术存在问题 请教灰色凹下直线问题 jbuilder编译的问题 有关网络视频会议系统的开发模型问题??? 如何实现在DW中取数据? 如何注册一个DCOM,让它跑在别的机子上? 关于条码阅读器输入数据的控件 如何注册一个DCOM,让它跑在别的机子上? 开机后,总是弹出了一个窗口? 闲着没事,贴个歌词,先~~~ editbox控件问题 Delphi6安装之后怎么会… 请教一个非常难的问题,请高手入席! 如何实现在DW中取数据? 请教:我在CMyView中的菜单消息响应函数中调用一个对话框,为什么有的能打开,有的对话框打不开? 取消ADO大批量查询的问题 如何设置临时文件夹目录? 关于条码阅读器输入数据的控件 请问高级程序员考试什么开始报名在哪报? 如何捕获子线程中的Exception 请 li zhifu(东北人)进来看!!!!! VC简单问题来者有分!转换DDB到DIB 求《数据结构与算法(C#版)》:电子工业出版社. 多谢!!!!! access数据库里备注字段用英文怎么写 如何导入excel文件成为一个SQL表 莫名其妙的问题,DeleteBatch is not a member of TDBBaseSODetail 一元二次方程的判别式的符号和发音 流体力学初级问题上下两平行圆盘,直径均为d,间隙厚度为δ,间隙中液体的动力粘度为μ,若下盘固定不动,上盘以角速度ω旋转,求所需力矩M的表达式 关于高中生物选修3课本的题,要有难度的,最好是一张卷子可以附带答案和解析的, 一元二次方程根的判别式与三角形形状的问题已知a、b、c是三角形ABC的三边长,且方程(c-b)x²+2(b-a)x+a-b=0有两个相等实数根,那么这个三角形的形状如何?我把判别式解出来了,但是三边关系 我高压96低压70,从小到大我一直血压都比正常的偏低一点,但我没有任何头疼等症状,有点偏胖,这是怎么回事.我妈就偏低,这个有遗传因素吗 信息技术的五个发展历程产生了哪些信息技术 不同波长的光(电磁波),温度不同?那波长又是怎么引起温度不同的?最简单就是微波炉了,工作原理是什么?那一般的电磁波也有温度吗?另外可见光里温度最高的是哪种色光?(拜托可以的话顺 初级流体力学题目 急着用,谁能帮忙解答一下,谢谢1.利用压缩空气把水从一封闭的大桶内通过一管子以2.6m/秒的流速压出,当管子的出口处高于桶内液面60cm时,桶内空气的计示压强为?2.在一理想 关于纳米的问题,单位换算.一般的认字直径在10的-10次方,某工厂生产的纳米碳纤维管的直径是33nm,问,他大约有几个分子排列而成. 拉曼光谱的激发波长不同,出峰位置则不同吗? 血压值低压90高压150算正常吗?年龄是54岁.血压怎么样才能降下来?平时要注意哪些方面? 请教三角函数符号的正确读法.请问三角函数符号sin、cos、tg、ctg、csc、sec的正确读法,用国际音标给出,另:这个符号是缩写吗?如果是,那么全称分别是什么呢?打错字了,应该是“这些符号” 在做拉曼光谱实验中,苯的波长是多少 怎样弥补高数、流体力学等基础知识?现在越念书越发现基础太差,最近用FLUENT计算了超多的结果,经试验验证模型是比较可靠和正确的,但是由于缺乏数值计算相关的数学基础知识和与流体流动 请教三角函数符号csc,sec的正确读法 物理中的符号 三角怎么读? 红外光谱仪的种类和工作原理是什么? 三角函数的符号怎么打? 初中所有数学各种符号,用中午读音标注怎么读, 傅里叶变换红外光谱的原理 我物理从选修3_1的电场强度开始就糊涂了,有什么方法能让理清电场强度、电势能电势、电势差、等的关系?但我需要的是实用的方法,不是两句应付的话,你说的书上有更全面的 关于..、一些看不懂的公式..、$\frac{a}{\left|a\right|}+\frac{{a}^{2}}{\left|{a}^{2}\right|}+\frac{{a}^{3}}{\left|{a}^{3}\right|}$与分式 m-nm+n的值相等的是( )A、 n-m-m+n B、 n-mm+nC、 -n-mm-n D、 -m-n-m-n、化简 a-1a2-4a+ 求信息技术的发展历程!速度要5个哦!~~~急用~~~ 一题关于物理的电场线、电势能、电场强度的判断,如图所示,某区域电场线左右对称分布,M、N为对称线上两点.下列说法正确的是()A.M点电势一定高于N点电势B.M点场强一定大于N点场强C. 梅雨和伏旱两种现象发生在下列哪个地区A南部沿海B华北平原C东北平原D长江中下油平原 信息技术的发展趋势什么 高压中心的低压中心控制地区的天气情况 为什么白天多云,对太阳辐射的反射作用强,夜晚多云,大气逆辐射作用强 氢氧化铁胶体稳定存在的主要原因是什么? 信息技术在未来的发展趋势 高中阶段怎样看红外光谱图? 红外光谱分析 哪位高人能帮我分析一下这个红外光谱...做的是菊糖与月桂酸甲酯的反应,上面是产物,下面是菊糖.请问那个有差异的峰(1650左右)是什么含义?在不能确定样品是否含有N,N-二甲 信息技术发展趋势是 高中怎么看红外光谱图图里标了官能团,但怎么看个数啊 红外光谱原理是什么? 一台影像测量仪有多重,大约外形物理尺寸有多大? 怎么看红外光谱图?我想弄懂``` 从原理和仪器上比较紫外-可见光谱分析和红外光谱分析的异同点 如何选择近红外光谱波段 计量体积要用【 】单位,常用的体积单位有【 】,【 】,【 】 红外光谱分析结果13330~4000cm-1,这一类的结果怎么读, 信息技术的五次发展历程分别发生在什么年代?具体点可以吗 信息技术的发展使生活更加丰富多彩的具体表现是什么? 在1l 2mol/l的氢氧化铁胶体中含有氢氧化铁胶粒数2NA 近红外光谱测定方法 信息生活怎样让我们的生活丰富多彩少 如何解1L2mol/L的氢氧化铁胶体中含有的氢氧化铁胶粒数 高气压与高压,低气压与低压有什么不同啊? 红外光谱 紫外光谱 拉曼光谱和核磁共振光谱的区别 在1L2mol/L的氢氧化铁溶液中含有氢氧化铁胶体数2NA个,为什么不对?3Q 五次信息技术的重大发展历程 氢氧化铁胶体稳定存在的主要原因是A、胶粒直径小于1 nm B、胶粒做布朗运动 C、胶粒带正电荷 D、胶粒不能通过半透膜 信息技术发展史上的五次革命 简要叙述原子荧光光谱分析法原理及方法的主要特点 胶体稳定存在的原因?胶体界稳的原因? 5次信息技术革命分别有什么意义拜托了,急~~~ 如何从课本中提炼考点,现在要整理生物选修1, 请问,一元二次方程根的判别式的符号读作? 高压和低压的差是多少算正常? 对氨基苯磺酸 与亚硝酸盐的反应 念 四声zhong还是念二声chong是发生重氮反应的“重”
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘