Request是Asp中非常重要的对象,他的主要功能是接收从客户端浏览器发送的请求信息、收集服务器端的环境变量。通常用来接收浏览器传递过来的查询字符串、表单、Cookies等等。客户端可通过表单或者在URL地址后面提供查询字符串的方法向服务器端提交数据,然后用Request对象来获得相关数据。简单地说,Request负责Asp的Input输入功能。Request包含多种集合、属性与方法。Request的语法:
Request[.Collection|Property|Method](Variable)
其中方括号中的内容表示Request的集合、属性与方法,圆括号中的内容是数据集合变量名。
Request对象的TotalBytes属性,获得客户端发送的请求正文中的总字节数,他是一个只读属性。语法:
Request.TotalBytes
例如:
<%
Dim count
Count = Request.TotalBytes
%>
Request对象的BinaryRead方法的功能是取得HTML表单的源内容,它是以二进制的形式读取客户端以POST方法传递过来的数据。例如:
<%
Dim a,b
a = Request.TotalBytes
b = Request.BinaryRead(a)
%>
此方法不能与Request.Form 一起使用,否则会出错。
Request最重要的是他的集合,这可是从浏览器获取传递的信息必须用到的。
Form集合,包含了HTTP请求中所有表单和、元素和他们的值。
Cookies集合,获得存储在浏览器的Cookies。
Querystring集合,得到查询字符串中变量的值。
ServerVariables集合,预得环境变量的值。
ClientCertificate集合,得到在HTTP请求中客户端认证的字段值。
Form集合是Request对象中使用比较多的数据集合,通过它可以获得客户端用POST方法提交的表单各项元素的值。。语法:
Request.From(element)[(index)|.count]
这里的element是指定集合要检索的表元素单名称;index是当表单元素中有多个值时,使用它可以按照索引形式存放,然后以索引号取值;count表示集合中元素的个数;Form集合按请求正文中的参数名称来索引。Request.Form(element)的值是请求正文中所有名称为element的数组。通过Request.Form(element).count可以确定参数中存在多少个值,若参数为关联多个值则计算为1,若找不到参数则为0。要引用有多个值的表单元素中的单个值,必须指定他的index值。Index值可以是从1到Request.Form(element).count中的任意数字。
例如,要取得用户通过组册表单填写的用户名username元素的值:
Name = Request.Form(“username”)
利用Count可以取得与元素相关的值的个数:
Request.Form(“username”).count
From集合通过POST提交数据,下面这个例子演示通过提交一个HTML表单, 以两种方式从Form集合中获取提交的信息。新建一个文件,命名为post.html,然后复制下面的代码:
<html>
<head>
<title>提交表单的页面</title>
</head>
<body>
<form name=”form1″ method=”post” action=”get.asp”>
<table width=”674″ border=”1″ align=”center” cellpadding=”0″ cellspacing=”0″ bordercolor=”#0000CC” bordercolordark=”#33CCFF”>
<tr>
<td colspan=”2″><div align=”center”>
<p>Asp的注册表单示例 </p>
</div></td>
</tr>
<tr>
<td width=”156″><div align=”center”>用户名:</div></td>
<td width=”512″><input name=”用户名” type=”text” id=”用户名” value=”请输入您的用户名!” size=”20″ maxlength=”20″></td>
</tr>
<tr>
<td><div align=”center”>密码:</div></td>
<td><input name=”密码” type=”password” id=”密码” value=”123456″ size=”20″ maxlength=”20″></td>
</tr>
<tr>
<td><div align=”center”>电子邮件:</div></td>
<td><input name=”电子邮件” type=”text” id=”电子邮件” value=”webmaster@www.com” size=”30″ maxlength=”30″></td>
</tr>
<tr>
<td><div align=”center”>真实姓名:</div></td>
<td><input name=”姓名” type=”text” id=”姓名” value=”不告诉你” size=”20″ maxlength=”20″></td>
</tr>
<tr>
<td><div align=”center”>性别:</div></td>
<td><p>
<label>
<input type=”radio” name=”性别” value=”男”>
男</label>
<br>
<label>
<input type=”radio” name=”性别” value=”女”>
女</label>
<br>
<label>
<input type=”radio” name=”性别” value=”太监”>
太监</label>
<br>
<label>
<input type=”radio” name=”性别” value=”人妖”>
人妖</label>
<br>
<label>
<input name=”性别” type=”radio” value=”未知”>
基因变异或无性别</label>
<br>
<label>
<input name=”性别” type=”radio” value=”保密” checked>
保密</label>
<br>
</p></td>
</tr>
<tr>
<td><div align=”center”>联系地址:</div></td>
<td><input name=”地址” type=”text” value=”请输入您的联系地址!” size=”50″ maxlength=”50″></td>
</tr>
<tr>
<td><div align=”center”>联系电话:</div></td>
<td><input name=”电话” type=”text” value=”021-12345678″ size=”15″ maxlength=”15″></td>
</tr>
<tr>
<td><div align=”center”>兴趣爱好:</div></td>
<td><p>
<label>
<input type=”checkbox” name=”爱好” value=”音乐”>
音乐</label>
<label>
<input type=”checkbox” name=”爱好” value=”舞蹈”>
舞蹈</label>
<label>
<input type=”checkbox” name=”爱好” value=”游戏”>
游戏</label>
<label>
<input type=”checkbox” name=”爱好” value=”看书”>
看书</label>
<label>
<input type=”checkbox” name=”爱好” value=”美食”>
美食
</label>
<br>
<label>
<input type=”checkbox” name=”爱好” value=”上网”>
上网</label>
<label>
<input type=”checkbox” name=”爱好” value=”购物”>
购物</label>
<label>
<input type=”checkbox” name=”爱好” value=”逛街”>
逛街</label>
<br>
</p></td>
</tr>
<tr>
<td><div align=”center”>注册目的:</div></td>
<td><select name=”注册目的” size=”5″ multiple>
<option value=”交友” selected>交友</option>
<option value=”恋爱”>恋爱</option>
<option value=”学习”>学习</option>
<option value=”娱乐”>娱乐</option>
<option value=”消遣”>消遣</option>
</select></td>
</tr>
<tr>
<td><div align=”center”>自我描述:</div></td>
<td><p>输入5个关键字来描述自己</p>
<p>
<input name=”自我描述” type=”text” value=”玉树临风” size=”20″ maxlength=”20″>
<input name=”自我描述” type=”text” value=”时尚达人” size=”20″ maxlength=”20″>
</p>
<p>
<input name=”自我描述” type=”text” value=”工作狂” size=”20″ maxlength=”20″>
<input name=”自我描述” type=”text” value=”宅” size=”20″ maxlength=”20″>
</p>
<p>
<input name=”自我描述” type=”text” value=”小气鬼” size=”20″ maxlength=”20″>
</p></td>
</tr>
<tr>
<td><div align=”center”>个人说明:</div></td>
<td><textarea name=”个人说明” cols=”45″ rows=”5″>这家伙很懒,什么都没有留下。</textarea></td>
</tr>
<tr>
<td><div align=”center”></div></td>
<td><input type=”submit” value=”提交”>
<input type=”reset” value=”重置”></td>
</tr>
</table>
</form>
</body>
</html>
除了这个post.html以外我们还需要一个ASP文件来接收传递过来的数据,上面的文件中method=”post”表示以POST的方法提交表单,action=”get.asp”其中get.asp就是表单提交的目标文件,因此我们建立一个get.asp,并用Request对象的FORM集合来读取刚刚提交的内容:
<%
Response.Write(“参数传递成功,下面将尝试用不同的方法读取参数:” &_
“(TotalBytes: ” & Request.TotalBytes & ” bytes! )<br><br>”)
Response.Write(“共收到上个页面传递过来的元素” & Request.Form.count &_
“个(相同名称的表单视为一组),下面是所有的表单内容:<br><br>”)
dim i
for i = 1 to Request.form.count
Response.write(“表单中第” & i & “个元素的值为:<b>” & Request.form(i) & “</b>”)
Response.write(“ ……..(” & Request.Form(i).count & “个参数!)<br />”)
next
Response.Write(“<br><hr align=’left’ width=’50%’>”)
Response.Write(“<br><br>”)
Response.Write(“接下来,用常规方式查看表单内容:<br>”)
Response.Write(“刚才输入的用户名:” & Request.Form(“用户名”) & “<br>”)
Response.Write(“刚才输入的密码:” & Request.Form(“密码”) & “<br>”)
Response.Write(“电子邮件地址:” & Request.Form(“电子邮件”) & “<br>”)
Response.Write(“您的真实姓名:” & Request.Form(“姓名”) & “<br>”)
Response.Write(“您选择的性别是:” & Request.Form(“性别”) & “<br>”)
Response.Write(“您的联系地址:” & Request.Form(“地址”) & “<br>”)
Response.Write(“您的兴趣爱好:” & Request.Form(“爱好”) & “<br>”)
Response.Write(“您的联系电话:” & Request.Form(“电话”) & “<br>”)
Response.Write(“注册的目的:” & Request.Form(“注册目的”) & “<br>”)
Response.Write(“代表自己的标签:” & Request.Form(“自我描述”) & “<br>”)
Response.Write(“个人说明:” & Request.Form(“个人说明”) & “<br>”)
Response.Write(“<br><hr align=’left’ width=’50%’>”)
%>
运行以后看看结果,下面粘贴上我自己的结果:
参数传递成功,下面将尝试用不同的方法读取参数:(TotalBytes: 816 bytes! )
共收到上个页面传递过来的元素11个(相同名称的表单视为一组),下面是所有的表单内容:
表单中第1个元素的值为:开心果 ……..(1个参数!)
表单中第2个元素的值为:11223344 ……..(1个参数!)
表单中第3个元素的值为:webmaster@www.com ……..(1个参数!)
表单中第4个元素的值为:不告诉你 ……..(1个参数!)
表单中第5个元素的值为:太监 ……..(1个参数!)
表单中第6个元素的值为:单身公寓 ……..(1个参数!)
表单中第7个元素的值为:021-12345678 ……..(1个参数!)
表单中第8个元素的值为:音乐, 游戏, 看书, 美食, 上网 ……..(5个参数!)
表单中第9个元素的值为:交友, 学习, 娱乐 ……..(3个参数!)
表单中第10个元素的值为:乱七八糟, 胡思乱想, 工作狂, 宅, 熬夜 ……..(5个参数!)
表单中第11个元素的值为:这家伙很懒,什么都没有留下。是吗? ……..(1个参数!)
接下来,用常规方式查看表单内容:
刚才输入的用户名:开心果
刚才输入的密码:11223344
电子邮件地址:webmaster@www.com
您的真实姓名:不告诉你
您选择的性别是:太监
您的联系地址:单身公寓
您的兴趣爱好:音乐, 游戏, 看书, 美食, 上网
您的联系电话:021-12345678
注册的目的:交友, 学习, 娱乐
代表自己的标签:乱七八糟, 胡思乱想, 工作狂, 宅, 熬夜
个人说明:这家伙很懒,什么都没有留下。是吗?
这个例子分别用指定名称的方法和for循环遍历所有元素的方法,演示了Form集合的使用。当表单总出现两以上个相同名称的元素,就可以利用类似访问数组的方法指定他们的Index值,否则系统会输出所有该名称的元素的值,并以逗号隔开。
2.Querystring集合
客户机浏览器与服务器交互的另一种方法就是通过Querystring集合传递信息。Querystring和Form集合的功能很相近,区别在于后者是通过HTML表单传递信息,前者通过URL传递数据和请求。请求中包含的参数就是Querystring集合的元素。Querystring的值由URL中“?”后的值指定。例如:
http://127.0.0.1/Query.asp?username=value
Querystring的语法:
Request.Querystring(variable).[(index)|.count]
其中Variable是QueryString中指定要检索的变量名称,Index是一个可选参数,用来检索多个Viarable值中的某一个值,他的值是从1到Querystring(variable).count之间的任何整数。使用Querystring集合在URL中传递信息可以在地址栏直接输入,也可以用超链接向下一个页面传递参数。例如:
新建一个querystring.asp文件放在站点根目录,内容如下:
<%
Dim name,username,tel
name = Request.Querystring(“name”)
username = Request.Querystring(“username”)
tel = Request.Querystring(“tel”)
Response.Write(“姓名:” & name & “<br />” & “用户名:” & username & “<br />” &_
“电话号码:” & tel)
%>
在地址栏输入: http://localhost/querystring.asp?name=张三&username=zhangsan123&tel=13812345678,得到的运行结果如下:
姓名:张三
用户名:zhangsan123
电话号码:13812345678
如果用超链接传递参数,可以这样写:
<a href=” http://localhost/querystring.asp?name=张三&username=zhangsan123&tel=13812345678”>点击这里查询</a>
得到的结果是一样的。
下面演示一下一个Variable下有多个值的情况,我们对前面的文件做一下改动:
<%
Dim name,username,tel
for i = 1 to Request.Querystring(“name”).count
name = Request.Querystring(“name”)(i)
username = Request.Querystring(“username”)(i)
tel = Request.Querystring(“tel”)(i)
Response.Write(“姓名:” & name & “<br />” & “用户名:” & username & “<br />” &_
“电话号码:” & tel & “<br /><br />”)
next
%>
然后使用下面的URL
http://localhost/querystring.asp?name=张三&name=李四&name=王二麻子&username=zhangsan123&username=lisi19958&username=wangermazi&tel=13812345678&tel=01068687299&tel=053110086
这个比较长呵呵,仔细看并不复杂。执行后显示的效果如下:
姓名:张三
用户名:zhangsan123
电话号码:13812345678
姓名:李四
用户名:lisi19958
电话号码:01068687299
姓名:王二麻子
用户名:wangermazi
电话号码:053110086
上面这个例子用一个For循环指定了Variable的index值,每循环一次i的值加1,用来取出Variable中的单个值。如果不指定Index值会是什么情况呢,我们去掉For循环,用上一个例子的代码,输出结果如下:
姓名:张三, 李四, 王二麻子
用户名:zhangsan123, lisi19958, wangermazi
电话号码:13812345678, 01068687299, 053110086
可以看出当没指定Index的时候系统会输出指定参数名称的所有值,并且以逗号分隔。
尽管Form集合和Querystring集合都可以用来传递信息,两者还是有一定的区别。首先Querystring只能传递少量信息,在提交数据例如写文章,用这样的方法显然很麻烦,而且对用户来说也不友好;在使用Querystring时可以直接在浏览器地址栏中输入查询字段,因此,在传递隐含信息例如密码的情况下,出于安全考虑使用Querystring显然不适合,而是使用From集合的Hidden元素对象来传递隐含信比较好;<form>标签的Method属性指定了表单的运行方式,该属性共有两个参数,Post和Get方法。Method=get时该表单主要从服务器端获取信息,Method=Post表示该表单用来向服务器发送信息。使用Form集合获取用户提交数据时用来提交数据的表单中需要使用Post方法,当使用Get方法时则不能使用Form集合获取数据,此时是通过Querystring集合从服务器端获得数据的。
3.ServerVariables集合
ServerVariables集合可以取得服务器的环境变量(Server Enviroment Variables),
语法:
Request.ServerVariables(环境变量名)
该集合中包含的变量名有很多,下面列举一下主要的,更多的可以搜索引擎查:
All_Http
客户端发送的所有HTTP标头,前缀HTTP_
All_Raw
客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_
Http_Referer
请求的字符串内容,包含客户端超链接的Internet地址
Http_User_Agent
客户端浏览器的类型
Login_User
用户登录 Windows NT的帐号
Path_Translated
获得ASP物理路径,并可进行虚拟路径到物理路径的映射
Query_String
获得Querystring,包括“?”后的所有内容
Request_Method
用于提出请求的方法,相当于用于HTTP的Get、Head、Post等
Script_Name
被执行脚本的完整虚拟路径
Server_Name
返回WEB服务器的主机名、DNS别名或者IP地址
Remote_Addr
发出请求的远程IP地址
Url
返回服务器地址
Server_Port
接受请求的服务器端口号
Path_Info
客户端提供的路径信息
Appl_MD_Path
应用程序的元数据库路径
Appl_Physical_Path
与应用程序元数据库路径相应的物理路径
Remote_Host
发出请求的远程主机名称
Local_Addr
返回接受请求的服务器地址
Http_Host
返回服务器地址
Server_Port_Secure
如果接受请求的服务器端口为安全端口时,则为1,否则为0
Server_Protocol
服务器使用的协议的名称和版本
Server_Software
应答请求并运行网关的服务器软件的名称和版本
Content_Length
客户端发出内容的长度
Https
如果请求穿过安全通道(SSL),则返回ON如果请求来自非安全通道,则返回OFF
Instance_ID
IIS实例的ID号
Instance_Meta_Path
响应请求的IIS实例的元数据库路径
Http_Cookie
返回Cookies的值
Https_Keysize
安全套接字层连接关键字的位数,如128
Https_Secretkeysize
服务器验证私人关键字的位数如1024
Https_Server_Issuer
服务器证书的发行者字段
Https_Server_Subject
服务器证书的主题字段
Auth_Password
当使用基本验证模式时,客户在密码对话框中输入的密码
Auth_Type
是用户访问受保护的脚本时,服务器用於检验用户的验证方法
Auth_User
代证的用户名
Cert_Cookie
唯一的客户证书ID号
Cert_Flag
客户证书标志,如有客户端证书,则bit0为0如果客户端证书验证无效,bit1被设置为1
Cert_Issuer
用户证书中的发行者字段
Cert_Keysize
安全套接字层连接关键字的位数,如128
Cert_Secretkeysize
服务器验证私人关键字的位数如1024
Cert_Serialnumber
客户证书的序列号字段
Cert_Server_Issuer
服务器证书的发行者字段
Cert_Server_Subject
服务器证书的主题字段
Cert_Subject
客户端证书的主题字段
Content_Type
客户发送的form内容或HTTPPUT的数据类型
下面的例子演示使用Request.ServerVariables获得指定服务器的环境变量:
<%
Response.Write “all_http: ” &_
Request.ServerVariables(“all_http”) & “<br />”&_
“http_referer: ” &_
Request.Servervariables(“http_referer”) & “<br />”&_
“http_user_agent: ” &_
Request.Servervariables(“http_user_agent”) & “<br />”&_
“login_user: ” &_
Request.Servervariables(“login_user”) & “<br />”&_
“path_translated: ” &_
Request.Servervariables(“path_translated”) & “<br />”&_
“query_string: ” &_
Request.Servervariables(“query_string”) & “<br />”&_
“request_method: ” &_
Request.Servervariables(“request_method”) & “<br />”&_
“script_name: ” &_
Request.Servervariables(“script_name”) & “<br />”&_
“server_name: ” &_
Request.Servervariables(“server_name”) & “<br />”&_
“remote_addr: ” &_
Request.Servervariables(“remote_addr”) & “<br />”
%>
运行后的结果如下:
all_http: HTTP_ACCEPT:image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* HTTP_ACCEPT_LANGUAGE:zh-cn HTTP_CONNECTION:Keep-Alive HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C) HTTP_ACCEPT_ENCODING:gzip, deflate
http_referer:
http_user_agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C)
login_user:
path_translated: C:inetpubwwwrootservervariables.asp
query_string:
request_method: GET
script_name: /servervariables.asp
server_name: localhost
remote_addr: 127.0.0.1
可以看到用Response.Writes输出的变量的值。除了例子中用到的变量以外可以尝试更多的环境变量。这些变量反映了Asp程序运行环境的各种信息,也是经常要用到的。
ClientCertificate集合
ClientCertificate 集合从 Web 浏览器发布请求中获取验证字段,如果 Web 浏览器使用 SSL3.0/PCT1 协议(也就是说,它使用以 https:// 开头的 URL,而不是 http://)连接服务器及服务器请求验证,则浏览器将发送验证字段。
如果没有发送验证,ClientCertificate 集合将返回 EMPTY。
必须先将 Web 服务器配置为要求客户端验证,然后才能使用 ClientCertificate 集合。
有关ClientCertificate集合更多的细节和语法可以参阅附件。
Response.Write(“您的兴趣爱好:” & Request.Form(“爱好”) & “”)爱好是个多选按钮,包含多个,怎么输出其中的一个值?