我不想用Delphi的Web Application来写
只生成控制台程序

解决方案 »

  1.   

    Delphi的Internet编程:CGI Web服务器应用程序是一种控制台应用程序。
    WinCGI 是一种GDI应用程序,当然仍只是非可视应用程序。你说的“  我在用delphi写控制台程序,...,我不想用Delphi
    的Web Application来写,编译后太庞大了”可能是误解,不
    可能很大嘛。编译要选择Build with runtime package。示例:
      Guest.htm文件中有一行代码定义用户单击Submit按钮时发生的
    动作(把表单的数据提交给服务器):<form method="post"action="
    guestbk.dll/form">  路径为/form的WebActionItem对象通过Request.ContentFields特
    性来访问收集到的数据。唉,我讲的够清楚了,给分吧。
    var
       MyPage: TStringList;
       ParamsList: TParamsList;
    begin
         begin
              ParamsList := TParamsList.Create;
              try 
                ParamsList.AddParameters(Request.ContentFields);
                GBTable.Open;
                GBTable.Append;
                GBTable.FieldByName('Name').Value :=              
                  ParamsList['fullnameText'];
                GBTable.FieldByName('EMail').Value :=              
                  ParamsList['emailText'];
                GBTable.FieldByName('WhereFrom').Value :=               
                  ParamsList['wherefromText'];
                GBTable.FieldByName('Comments').Value :=               
                  ParamsList['commentsTextArea'];
                GBTable.FieldByName('FirstTime').Value :=               
                  CompareStr(ParamsList['firstVisitCheck'], 'on') = 0);
                GBTable.FieldByName('DateTime').Value := Now;
                GBTable.Post;
              except
                   Response.Content := 'An Error occurred in       
                     processing your data.';
                   Handled := True;
              end;
              finally
                ParamsList.Free;
                GBTable.Close;
              end;
        
      

  2.   

    用Delphi的Web Application来编写CGI程序,体积的确比较大,最小都有300K。不过,你可以用Aspack压缩这个CGI程序,压缩后体积只有150K左右。使用Web Application的好处是方便快捷,Delphi已帮你做了很多复杂的底层工作(例如环境变量中的参数解码),而且可以与数据库实现无缝连接。其实,如果你要直接使用纯Pascal语言来编写CGI程序,也是可以的,不过就要靠你自己编写底层的解码函数了。
      

  3.   

    可是我想了解一下,它到底是怎样读POST数据的,我看了HTTPApi CGIApi 很乱,也大概看了RFC-HTTP 1.0
    晕乎乎的,谁可以给一点提示也行啊。(60分我不愿意老是吊在这里,可问题总也没有头绪)
      

  4.   

    采用CGI Stand-Alone 模式编译出来的CGI程序,是通过环境变量来传递参数的。Web Server会首先传递给CGI程序一个名为"CONTENT_LENGTH"的环境变量,里面存放了缓冲区的大小,然后CGI程序将根据这个数值,从标准输入接口读入相应字节数的数据。数据读入后,要进行解码,以便还原出POST给CGI程序的不同参数。如果你打算直接使用纯Pascal语言来编写CGI程序,就要自己编写上述的底层处理函数了。虽然实现起来比较复杂,但是编译出来的CGI程序体积非常小。我试了一下,仅有6K左右,呵呵。
      

  5.   

    ******************************************    从标准输入接口读入相应字节数的数据。******************************************
    我想知道的就是这个,该怎么读?
    READLN好像不行,我试过快,这是问题的最后一步了,只要搞懂这个马上结账
    :)
      

  6.   

    下面就是直接从标准输入接口读入网页POST数据的CGI程序,完全利用纯Pascal语言实现,没有使用Web Application模块:var
      I,StdIn,StdOut: Integer;
      S: string;
      Variable:string;
      Buffer:array [0..4095] of char;
    begin
      StdIn:= GetStdHandle(STD_INPUT_HANDLE);
      StdOut:= GetStdHandle(STD_OUTPUT_HANDLE);
      S:= '';
      SetString(Variable, Buffer, GetEnvironmentVariable(PChar('CONTENT_LENGTH'), Buffer, SizeOf(Buffer)));
      I:= StrToInt(Variable);
      if I <= 0 then exit;
      FileSeek(StdIn, 0, FILE_BEGIN);
      SetString(S, nil, I);
      FileRead(StdIn, S[1], I);  //S中的内容就是网页POST给CGI程序的数据