程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Internet編程技巧1

Internet編程技巧1

編輯:Delphi

Internet編程技巧

實現超級鏈接

在程序中實現打開浏覽器,打開郵件程序的功能首先要在uses部分加入

uses Shellapi;

接著在需要超級鏈接的地方使用

SellExecute(handle

nil

pchar(mailto:[email protected])

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;

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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved