深入研究表单提交方式:GET/POST[1]

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

本文简介:选择自 hackfan 的 Blog

深入研究表单提交方式:GET/POST

Hackfan

本文平台:Windows 2000 Professional + Apache 1.3.17 + Perl 5.6.1 + Internet Explorer 5.00.2920.0000

  大家知道目前表单提交的方式有GET和POST。我在这里不多说什么,给大家看一个以GET方式提交的表单的请求:

GET /cgi-bin/tech/method.cgi?GET=GET HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://localhost//other.html
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost:8080;
Connection: Keep-Alive

  这个请求是我们通过这个HTML代码发出的:

<form action="http://localhost:8080;/cgi-bin/tech/method.cgi" method="GET">
<input type="text" size="10;" value="GET" name="GET">
<input type=submit value="GET方式">
</form>

  这个请求已经超出了我们研究的范围,我们只研究其中的第一行。其中,第一个"GET"说出了提交的方式,是以GET方式提交的;中间的就是提交给服务器上哪个程序,前面一部分"/cgi-bin/tech/method.cgi"就是我们HTML的form中action的内容,而后面的"GET=GET"就是HTML的form中,input的内容:我们发现IE已经把这个表单的内容转换成特定格式了。在Perl中,通过$GET=$ENV{&QUERY_STRING&}获得以GET发送的数据。

  我们再看一个以POST方式提交的表单的请求:

POST /cgi-bin/tech/method.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://localhost//other.html
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost:8080;
Content-Length: 9
Connection: Keep-Alive

POST=POST

  同样给出HTML:

<form action="http://localhost:8080;/cgi-bin/tech/method.cgi" method="POST">
<input type="text" size="10;" value="POST" name="POST">
<input type=submit value="POST方式">
</form>

  我们发现其中的数据跑到了最下面。在Perl中,通过read(STDIN,$POST,$ENV{&CONTENT_LENGTH&})获得以POST发送的数据。我记得GET发送数据最多只能1024字节,而POST好像很大很大!

  思考:如果我有这么一段HTML代码,它将会出现什么问题呢?

<form action="http://localhost:8080;/cgi-bin/tech/method.cgi?GET=GET" method="POST">
<input type="text" size="10;" value="POST" name="POST">
<input type=submit value="GET/POST方式">
</form>

  这个代码在很多程序上可能用到过,但是大多数人不会好好的想一想,究竟哪些内容是以GET发送的,哪些内容是以POST发送的。我们看看它的请求是什么:

POST /cgi-bin/tech/method.cgi?GET=GET HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://localhost//other.html
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost:8080;
Content-Length: 9
Connection: Keep-Alive

POST=POST

  哈!原来是以POST发送的。但是,你一定发现了有一部分数据放在了第一行,就是和GET的情况一样的。其实这个例子很典型,是POST和GET混发!
  不相信你在Perl中,用read(STDIN,$POST,$ENV{&CONTENT_LENGTH&})和$GET=$ENV{&QUERY_STRING&}看看,到底哪个里面有"GET=GET"这个数据。

  我给大家提供设备,大家自己去研究研究:

HTML部分:  

<html>
<head>
<title>Get-Post</title>
</head>

<body>
<form action="/cgi-bin/tech/method.cgi" method="GET">
<input type="text" size="10;" value="GET" name="GET">
<input type=submit value="GET方式">
</form>
<form action="/cgi-bin/tech/method.cgi" method="POST">
<input type="text" size="10;" value="POST" name="POST">
<input type=submit value="POST方式">
</form>
<form action="/cgi-bin/tech/method.cgi?GET=GET" method="POST">
<input type="text" size="10;" value="POST" name="POST">
<input type=submit value="GET/POST方式">
</form>
<form action="/cgi-bin/tech/method.cgi?name=Hackfan&age=16&email=hackfan@163.net" method="POST">
<input type="text" size="10;" value="Suzhou" name="address">
<input type="text" size="10;" value="msger.net" name="homepage">
<input type="text" size="10;" value=?" name="qq">
<input type=submit value="复杂GET/POST方式">
</form>
</body>
</html>

Perl部分:

#!c:\perl\bin\perl.exe

$|=1;

print "Content-type:text/html\n\n"

print "发送方式:$ENV{&REQUEST_METHOD&}<br>\n"
if(read(STDIN,$POST,$ENV{&CONTENT_LENGTH&})){
 print "POST得到的数据:$POST<br>\n"
}
if($GET=$ENV{&QUERY_STRING&}){
 print "GET得到的数据:$GET<br>\n"
}

$METHOD="POST"

for($i=0;$i<=1;$i++){
 foreach(split(/&/,$$METHOD)){

本文关键:,GET POST FORM 表单 Perl,
  相关方案
Google
 

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

go top