A Problem about ISAPI(100分)

  • 主题发起人 主题发起人 lxwizard
  • 开始时间 开始时间
L

lxwizard

Unregistered / Unconfirmed
GUEST, unregistred user!
I am a beginner of Delphi5.0, Now I am learning to write a ISAPI program, here is a problem about "POST" and "GET" method
I created a Web Server Application base on ISAPI, here is the code:

procedure TWebModule1.WebModuleWebActionItem1Action(Sender:TObject; Request:TWebRequest;
Response:TWebResponse;Var Handled:Boolean);
Var
Input:TString;
areaname:String;
Begin
Input:=Nil;
Case request.methodtype of
mtpost: Input:=request.ContentFields;
mtget,mtput,mthead: Input:=request.QueryFields;
end;
areaname:=Input.Values['area']
......
......
End.

Now, the problem is:
I use "GET" method in Html I can get the value of 'area', if I use "POST" method in Html I can get Nothing, why? Please help me

here is the Html code:

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF">
<form method=get action="/scripts/webquery.dll">
input: <INPUT NAME="Area" VALUE="" SIZE=60>
<p>
<input type="submit" value="Submit">
<input type="Reset" name="Submit" value="reset">
</p>
</form>
</body>
</html>

OS: Win98, omnihttp web server
 
可能是Delphi的Bug,我原来也遇上过把Submit按钮的value="Submit"去掉就
可以了,在Html文本中不能有value子句不知为什么。
 
Fencer:你说的办法我曾也试过,不管用。你能在你的机子上试试吗?然后告诉我结果,Thank u
 
将Edit的VALUE=""也去掉试试看,调试最好用ie4可以看到出错提示,ie5什么也出
不来。看看现在出什么提示?
 
你说的方法不行,程序根本就不出错,只不过area的值为空(用POST方法的话),后来我换了PWS作为http server,程序一点没动,则POST方法可以返回正确值。这下我就更不懂了,看来这些http server之间还是有些区别的。Delphi的看来也有些bug,把我等这些初学者害苦了。很遗憾,你们的答案都未解决我的问题,我只不过换了一个服务器软件,一切就正常了。如果我一开始就用恐怕根本就不知道有这么回事,无论如何,谢谢你们了
 
你的代码有点奇怪,能工作才是不正常的. 因为你在使用TString之前根本
没有create!
 
以下是一个外国朋友贴出的代码,我一字不动照拷入Delphi,编译成DLL后,问题是一样的,在omnihttp下,POST就是不起作用。
GET其实也有问题,只不过能提出值来。我特意试了一下omnihttp自带的测试样例,其中Win-CGI测试时是POST管用,而GET不管用,
其实现在的问题应该变为:这种ISAPI调试环境(Win98第二版+omnihttp2.0+IE5.0+Delphi5.0)有点不正常?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, HTTPApp;

type
TWebModule1 = class(TWebModule)
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
WebModule1: TWebModule1;

implementation

{$R *.DFM}

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

Var
Input:tStrings;
POSTareaname,GETareaname:String;
Page:TStringList;
Begin
Input:=Nil;
Case request.methodtype of
mtpost: Input:=request.ContentFields;
mtget,mtput,mthead: Input:=request.QueryFields;
end;
GETareaname:=Input.Values['areaget'];
POSTareaname:=Input.Values['areapost'];
Page := TStringList.Create;
try
with Page do
begin
Add('<HTML><BODY>Your request contains the following information:<BR><BR>');
Add('<BR>Your IP address is: ' + Request.RemoteAddr );
Add('<BR>Your POSTareaname is: ' + POSTareaname );
Add('<BR>Your GETareaname is: ' + GETareaname );
Add('<BR>You are using the following browser and operating system: ' + Request.UserAgent);
Add('<BR>You asked for the following URL: http://' + Request.Host + Request.URL + Request.PathInfo );
Add('</BODY></HTML>');
end ;
Response.Content := Page.Text ;
finally
Page.Free;
end ;
Handled := True ;
end;

end.




html file:

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FF00EE">

<form method="post" action="/scripts/webquery.dll">
input using post : <INPUT NAME="Areapost" VALUE="" SIZE=60>
<p>
<input type="submit" value="Submit">
<input type="Reset" value="reset">
</p>
</form>

<form method="get" action="/scripts/webquery.dll">
input using get: <INPUT NAME="Areaget" VALUE="" SIZE=60>
<p>
<input type="submit" value="Submit">
<input type="Reset" value="reset">
</p>
</form>
</body>
</html>

 
代码是没有错误的,你不用再费力找代码的错误了。
也可能与Web server有关,我一直用Apache做服务器
出的毛病就像我写的不能有Value不知为什么。
 
我改用Samber为http服务器,现在没问题了,这应该是Omnihttp的bug,害得我弄了好几天,唉。谢谢大家了,遗憾的没人可以得分,sorry.
 
多人接受答案了。
 

Similar threads

A
回复
0
查看
932
Andreas Hausladen
A
A
回复
0
查看
805
Andreas Hausladen
A
I
回复
0
查看
799
import
I
后退
顶部