Browse Source

+ Added testcgi program

michael 26 years ago
parent
commit
1e99bc5a9f
3 changed files with 124 additions and 2 deletions
  1. 5 2
      fcl/tests/Makefile
  2. 8 0
      fcl/tests/README
  3. 111 0
      fcl/tests/testcgi.pp

+ 5 - 2
fcl/tests/Makefile

@@ -36,7 +36,7 @@ NEEDOPT=-S2
 
 
 UNITOBJECTS=
 UNITOBJECTS=
 EXEOBJECTS=stringl dparser fstream mstream list threads testrtf\
 EXEOBJECTS=stringl dparser fstream mstream list threads testrtf\
-           cfgtest testz testz2 xmldump htdump
+           cfgtest testz testz2 xmldump htdump testcgi
 
 
 
 
 #####################################################################
 #####################################################################
@@ -113,7 +113,10 @@ endif
 
 
 #
 #
 # $Log$
 # $Log$
-# Revision 1.7  1999-07-11 22:43:23  michael
+# Revision 1.8  1999-07-15 12:05:55  michael
+# + Added testcgi program
+#
+# Revision 1.7  1999/07/11 22:43:23  michael
 # + Added htdump
 # + Added htdump
 #
 #
 # Revision 1.6  1999/07/09 21:08:16  michael
 # Revision 1.6  1999/07/09 21:08:16  michael

+ 8 - 0
fcl/tests/README

@@ -4,6 +4,13 @@ the FCL.
 If you add a test give in this file a short description of what 
 If you add a test give in this file a short description of what 
 class/function it tests, and your initials..
 class/function it tests, and your initials..
 
 
+Names
+-----
+MVC : Michael Van Canneyt
+SG  : Sebastian Guenther
+MH  : Michael Hess
+
+
 File         Tests what ?
 File         Tests what ?
 ----         ------------
 ----         ------------
 
 
@@ -19,3 +26,4 @@ testrtf.pp   TRTFParser object from rtfpars (MVC)
 cfgtest.pp   Example for using XML read/write as cfg file (SG)
 cfgtest.pp   Example for using XML read/write as cfg file (SG)
 xmldump.pp   xml dump program (SG)
 xmldump.pp   xml dump program (SG)
 htdump.pp    htdump dumps XL IDL definition as ObjectPascal classes (MVC)
 htdump.pp    htdump dumps XL IDL definition as ObjectPascal classes (MVC)
+testcgi.pp   test program or ezcgi class (MH)

+ 111 - 0
fcl/tests/testcgi.pp

@@ -0,0 +1,111 @@
+
+program CGITest;
+
+{$mode delphi}
+
+uses classes, ezcgi;
+
+// In the following class you only need to use either DoPost or DoGet
+// depending on what type of CGI request you want to use. If you only
+// are going to be making GET requests that you only need to define
+// and override DoGet and like wise for POST requests.
+
+type
+   TCGIData = class(TEZcgi)
+      procedure DoPost; override;
+      procedure DoGet; override;
+      procedure ShowStuff;
+   end;
+
+var
+   cgiStuff : TCGIData;
+
+// All output from the CGI must first begin with the WriteContent
+// call. This places the passed information and the correct CR's
+// required. In most cases you will always use it as shown below.
+// However if you ever need to return content that isn't standard
+// text/html this allows you to set what that content type is.
+//
+// The PutLine call just passes the information indicated out into
+// the stream for return to the client browser.
+
+
+procedure TCGIData.DoGet;
+begin
+   WriteContent('text/html');
+   PutLine('++++++++++ Using GET +++++++++');
+   ShowStuff;
+end;
+
+procedure TCGIData.DoPost;
+begin
+   WriteContent('text/html');
+   PutLine('++++++++++ Using POST +++++++++');
+   ShowStuff;
+end;
+
+// I wrote this method so that you can see everything that is passed to
+// and stored by the TEZcgi class. It currently stores all normal CGI
+// as well as everything passed to the CGI by the client. These
+// variables can be accessed via the following properties.
+//
+// Values[Index : string];
+// The Index data can be something like AUTH_TYPE, SCRIPT_NAME, or any
+// standard HTML or CGI environment variable. This can also be the
+// field name of the content being passed in a query string such as
+// "name" found in  //URL/CGI/cgiapp?name=bob
+//
+// Another routine is availble GetValue(Index, defaultValue : string);
+// This routine does the same as the property Values except it allows
+// you to set a default value to be returned if no variable of type
+// name index is found.
+
+// This data is stored in a TStringList so you can retreive it by index
+// as well if you know the index location of the information.
+//
+// The properties for doing this are Names[index : integer] and
+// Variables[index : integer]. Names returns the name of the variable,
+// this would be the data passed in the values or GetValue calls.
+// Instead of returning the value "bob" it returns the value "name". The
+// variables property returns the whole string so using the name example
+// above it would return "name=bob".
+//
+// To determine how many environment variables have been stored you can
+// use the VariableCount property.
+//
+// The following procedure loops through all of the enviroment variables
+// and prints them back to the client. This is a good CGI example to
+// show you exactly what information you have to work with.
+
+procedure TCGIData.ShowStuff;
+var
+   loop : integer;
+
+begin
+   for loop := 0 to VariableCount - 1 do
+      PutLine(Variables[loop] + '<BR>');
+end;
+
+// what follows is the actual program begin..end.
+// The Create call for the class does all the work of the CGI loading
+// the environment variables.
+// The FName and FEmail data is used by the Error report. If the CGI
+// doesn't work correctly for the user this data is included in an
+// error report that is returned to the user which tells them who to
+// inform and how.
+// The Run command starts processing the CGI request and eventually
+// calls either the DoGet or DoPost depending on the request type.
+
+// I don't try and trap it but the class does raise an exception called
+// ECGIException when some error is generated.
+
+begin
+   try
+      cgiStuff := TCGIData.Create;
+      cgiStuff.FName := 'Michael A. Hess';    // replace with your name
+      cgiStuff.FEmail := '[email protected]';// replace with your email
+      cgiStuff.Run;
+   finally
+      cgiStuff.Free;
+   end;
+end.