Internet编程技巧1[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 cool99 的 blog

internet编程技巧

实现超级链接

在程序中实现打开浏览器,打开邮件程序的功能首先要在uses部分加入

uses shellapi;

接着在需要超级链接的地方使用

sellexecute(handle

nil

pchar('mailto:guihong@163.net')

nil

nil

sw_shownormal);

其中pchar()中的mailtos是打开邮件程序的,可以换成http://、ftp://、gopher://、new:、telnet:等多种形式

在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;

本文关键:Internet编程技巧
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top