asp Request 对象 用户手册
Request 对象在 HTTP 请求期间,检索客户端浏览器传递给服务器的值 。
语法
Request[.collection|property|method](variable)
集合
ClientCertificate
ClientCertificate 集合从 Web 浏览器发布请求中获取验证字段(由 X.509 标准指定)。
如果 Web 浏览器使用 SSL3.0/PCT1 协议(也就是说,它使用以 https:// 开头的 URL,而不是 http://)连接服务器及服务器请求验证,则浏览器将发送验证字段。
如果没有发送验证,ClientCertificate 集合将返回 EMPTY。
必须先将 Web 服务器配置为要求客户端验证,然后才能使用 ClientCertificate 集合。
语法
Request.ClientCertificate( Key[SubField] )
参数
Key
指定要获取的验证字段名称。客户端验证包括下列字段。值 意义
Certificate 按 ASN.1 格式的二进制流字符串,其中包括完整的验证内容。
Flags 一组标志,提供其他客户端验证信息。可以设置下面的标志:
ceCertPresent - 当前的客户端验证。
ceUnrecognizedIssuer - 该链上来自未知的发布者的最后一个验证。
注意 要使用以上标志,必须在 ASP 页中包含客户端验证包含文件。若您正在使用 VBScript,则应包含 cervbs.inc。这些文件安装在 \Inetpub\ASPSamp\Samples 目录下。
Issuer 包含子字段值的列表的字符串,此列表包含验证发布者的信息。若该值在无 SubField 项的情况下指定,则 ClientCertificate 集合返回一个以逗号分隔的子字段列表。例如,C=US, O=Verisign 等。
SerialNumber 包含验证的序列号的字符串,序列号以连字符 (-) 分隔的 16 进制 ASCII 码表示。例如,04-67-F3-02。
Subject 包含子字段值的列表的字符串,此列表包含有关验证的主题信息。若该值在无 SubField 项的情况下指定,则 ClientCertificate 集合返回一个以逗号分隔的子字段列表。例如,C=US, O=Verisign 等。
ValidFrom 指定验证何时有效。此日期遵循 VBScript 格式并随国家(地区)设置而变化。例如,在美国可表示为 9/26/96 11:59:59 PM.
ValidUntil 指定验证何时到期。
SubField
可选参数,用于按 Subject 或 Issuer 关键字检索单独的字段。此参数作为一个后缀添加到 Key 参数中。例如,IssuerO 或 SubjectCN。下表列出了一些通用的 SubField 值。值 意义
C 指定原国家(地区)名。
CN 指定公用用户名。(此子字段仅同 Subject 关键字一起使用。)
GN 指定给定的名称。
I 指定一组首字母。
L 指定所在地。
O 指定公司或组织名称。
OU 指定机构的名称。
S 指定州或省。
T 指定此人或组织的头衔。
与在上述列表中所列的值不同,SubField 的值可被 ASN.1 标识所识别。ASN.1 标识的格式是一串通过句点 (.) 分隔的一系列数。例如: 3.56.7886.34。
注释
可以通过关键字用循环来遍历 ClientCertificate 集合。下面的例子对此进行演示。
<%
For Each key in Request.ClientCertificate
Response.Write( key & ": " & Request.ClientCertificate(key) & "<BR>")
Next
%>
示例
下面的示例使用 Subject 关键字测试客户端验证是否存在。
<%
If Len(Request.ClientCertificate("Subject")) = 0
Response.Write("No client certificate was presented")
End if
%>
下面的示例获取发布客户端验证的公司的公用名。
<%= Request.ClientCertificate("IssuerCN") %>
下面的示例检查客户端验证主题的组织名。
<%
If (Request.ClientCertificate("Subject")="Msft")
Response.Write("Good Choice!")
End if
%>
下面的示例显示客户端验证何时到期。
This certification will expire on
<%= Request.ClientCertificate("ValidUntil") %>
下面的示例使用 Flags 关键字测试客户端验证的发布者是不是已知的。第一行的 include 命令使脚本可使用已命名标志 ceUnrecognizedIssuer。
<!--#include file="cervbs.inc" -->
<%
If Request.ClientCertificate("Flags") and ceUnrecognizedIssuer then
Response.Write "Unrecognized issuer"
End If
%>
Cookies
Cookies 集合允许用户检索在 HTTP 请求中发送的 cookie 的值。
语法
Request.Cookies(cookie)[(key)|.attribute]
参数
cookie
指定要检索其值的 cookie。
key
可选参数,用于从 cookie 字典中检索子关键字的值。
attribe
指定 cookie 自身的有关信息。其属性参数如下:名称 说明
HasKeys 只读。指定 cookie 是否包含关键字。
注释
可以通过包含一个 key 值来访问 cookie 字典的子关键字。如果访问 cookie 字典时未指定 key,则所有关键字都会作为单个查询字符串返回。例如,如果 MyCookie 有两个关键字, First 和 Second ,而在调用 Request.Cookies时并未指定其中任何一个关键字,那么将返回下列字符串。
First=firstkeyvalue&Second=secondkeyvalue
如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。
要确定某个 cookie 是不是 cookie 字典(cookie 有否有关键字),可使用下列脚本。
<%= Request.Cookies("myCookie").HasKeys %>
如果 myCookie 是一个 cookie 字典,则前面的赋值为 TRUE。否则,为 FALSE。
可以通过循环遍历 Cookies 集合中的所有 cookie 或 cookie 中的所有关键字。但是,通过关键字在没有关键字的 cookie 上遍历将不产生任何输出。使用 HasKeys 语法先检查一下 cookie 是否有关键字,可以避免这种情况。下面的例子对此进行演示。
<%
'Print out the entire cookie collection.
For Each cookie in Request.Cookies
If Not cookie.HasKeys Then
'Print out the cookie string
%>
<%= cookie %> = <%= Request.Cookies(cookie)%>
<%
Else
'Print out the cookie collection
For Each key in Request.Cookies(cookie)
%>
<%= cookie %> (<%= key %>) = <%= Request.Cookies(cookie)(key)%>
<%
Next
End If
Next
%>
示例
下面的例子打印 Web 页中的 myCookie 的值。
这是名为 myCookie 的 cookie 值:
<%= Request.Cookies("myCookie") %>
Form
Form 集合通过使用 POST 方法的表格检索邮送到 HTTP 请求正文中的表格元素的值。
语法
Request.Form(element)[(index)|.Count]
参数
element
指定集合要检索的表格元素的名称。
index
可选参数,使用该参数可以访问某参数中多个值中的一个。它可以是 1 到 Request.Form(parameter).Count 之间的任意整数。
注释
Form 集合按请求正文中参数的名称来索引。Request.Form(element) 的值是请求正文中所有 element 值的数组。通过调用 Request.Form(element).Count 来确定参数中值的个数。如果参数未关联多个值,则计数为 1。如果找不到参数,计数为 0 。
要引用有多个值的表格元素中的单个值,必须指定 index 值。index 参数可以是从 1 到 Request.Form(element).Count 中的任意数字。如果引用多个表格参数中的一个,而未指定 index 值,返回的数据将是以逗号分隔的字符串。
在使用 Request.Form 参数时,Web 服务器将分析 HTTP 请求正文并返回指定的数据。如果应用程序需要未分析的表格数据,可以通过调用不带参数的 Request.Form 访问该数据。
使用重述符可以遍历表格请求中的所有数据值。例如,用户通过指定两个值填写表格,Chocolate 和 Butterscotch。对于 FavoriteFlavor 参数,您可以使用下面的脚本检索这些值。
<%
For Each item In Request.Form("FavoriteFlavor")
Response.Write item & "<BR>"
Next
%>
上述脚本显示如下。
Chocolate
Butterscotch
使用 For...Next 循环可以生成同样的输出,如下列脚本所示。
<%
For i = 1 To Request.Form("FavoriteFlavor").Count
Response.Write Request.Form("FavoriteFlavor")(i) & "<BR>"
Next
%>
使用该复述符可以显示参数名。如下列脚本所示。
<% For Each x In Request.Form %>
Request.Form( <%= x %> ) = <%= Request.Form(x) %> <BR>
<% Next %>
该脚本在浏览器上显示下列信息。
FavoriteFlavor = Chocolate
FavoriteFlavor = Butterscotch
示例
请考虑下列表格。
<FORM ACTION = "/scripts/submit.asp" METHOD = "post">
<P>Your first name: <INPUT NAME = "firstname" SIZE = 48>
<P>What is your favorite ice cream flavor: <SELECT NAME = "flavor">
<OPTION>Vanilla
<OPTION>Strawberry
<OPTION>Chocolate
<OPTION>Rocky Road</SELECT>
<p><INPUT TYPE = SUBMIT>
</FORM>
下列的请求正文可以从该脚本中发送。
firstname=James&flavor=Rocky+Road
可以使用下面的脚本。
Welcome, <%= Request.Form("firstname") %>.
Your favorite flavor is <%= Request.Form("flavor") %>.
下面的输出就是结果。
Welcome, James. Your favorite flavor is Rocky Road.
如果使用下面的脚本
The unparsed form data is: <%= Request.Form %>
结果为
The unparsed form data is: firstname=James&flavor=Rocky+Road
QueryString
QueryString 集合检索 HTTP 查询字符串中变量的值。HTTP 查询字符串由问号 (?) 后的值指定。几个不同的进程都可以生成查询字符串。如,anchor 标记
<A HREF= "example?string=this is a sample">string sample</A>
生成值为 "this is a sample" 的变量名字符串。通过发送表格或由用户在其浏览器的地址框中键入查询也可以生成查询字符串。
语法
Request.QueryString(variable)[(index)|.Count]
参数
variable
在 HTTP 查询字符串中指定要检索的变量名。
index
这是一个可选参数,可以用来检索 variable 的多个值中的某一个值。这可以是从 1 到 Request.QueryString(variable).Count 之间的任何整数。
注释
QueryString 集合是在 ServerVariables 集合中 QUERY_STRING 变量的分析版本 。它可以让您以名称检索 QUERY_STRING 变量。Request.QueryString (参数) 的值是出现在 QUERY_STRING 中所有参数 的值的数组。通过调用 Request.QueryString(parameter).Count 可以确定参数有多少个值。如果变量未关联多个数据集,则计数为 1。如果找不到变量,计数为 0。
要在多个数据集合的一个中引用 QueryString 变量,请指定 index 的值。index 参数可以是 1 到 Request.QueryString(variable).Count 中任意值。如果没有指定 index 的值,引用多个 QueryString 变量中的某个变量时,返回的数据是逗号分隔的字符串。
在 Request.QueryString 中使用参数时,服务器分析发送给请求的参数,并返回指定的数据。如果应用程序需要未分析的 QueryString 数据,可以通过调用不带参数的 Request.QueryString 检索到这个数据。
可以使用复述符在查询字符串中循环遍历所有的数据值。例如,如果发送以下的请求
http://NAMES.ASP?Q=Fred&Q=Sally
而且 Names.asp 包含下面的脚本,
---NAMES.ASP---
<%
For Each item In Request.QueryString("Q")
Response.Write item & "<BR>"
Next
%>
Names.asp 将显示如下。
Fred
Sally
上述脚本也可以用 Count 来写。
<%
For I = 1 To Request.QueryString("Q").Count
Response.Write Request.QueryString("Q")(I) & "<BR>"
Next
%>
示例
客户端请求
/scripts/directory-lookup.asp?name=fred&age=22
results in the following QUERY_STRING value.
name=fred&age=22.
QueryString 集合将包含 name 和 age两个成员。那么,您就可以使用下面的脚本。
Welcome, <%= Request.QueryString("name") %>.
Your age is <%= Request.QueryString("age") %>.
将输出
Welcome, Fred. Your age is 22.
如果使用下面的脚本
The unparsed query string is: <%=Request.QueryString %>
将输出
The unparsed query string is: name=fred&age=22
ServerVariables
ServerVariables 集合检索预定的环境变量。
语法
Request.ServerVariables (server environment variable)
参数
服务器环境变量
指定要检索的服务器环境变量名。可以使用下面列出的值。变量 说明
ALL_HTTP 客户端发送的所有 HTTP 标题文件。
ALL_RAW 检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称总是大写的。使用 ALL_RAW 时,标题名称和值只在客户端发送时才出现。
APPL_MD_PATH 检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。
APPL_PHYSICAL_PATH 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路径以返回值。
AUTH_PASSWORD 该值输入到客户端的鉴定对话中。只有使用基本鉴定时,该变量才可用。
AUTH_TYPE 这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。
AUTH_USER 未被鉴定的用户名。
CERT_COOKIE 客户端验证的唯一 ID,以字符串方式返回。可作为整个客户端验证的签字。
CERT_FLAGS 如有客户端验证,则 bit0 为 1。
如果客户端验证的验证人无效(不在服务器承认的 CA 列表中),bit1 被设置为 1。
CERT_ISSUER 用户验证中的颁布者字段(O=MS,OU=IAS,CN=user name,C=USA)。
CERT_KEYSIZE 安全套接字层连接关键字的位数,如 128。
CERT_SECRETKEYSIZE 服务器验证私人关键字的位数。如 1024。
CERT_SERIALNUMBER 用户验证的序列号字段。
CERT_SERVER_ISSUER 服务器验证的颁发者字段。
CERT_SERVER_SUBJECT 服务器验证的主字段。
CERT_SUBJECT 客户端验证的主字段。
CONTENT_LENGTH 客户端发出内容的长度。
CONTENT_TYPE 内容的数据类型。同附加信息的查询一起使用,如 HTTP 查询 GET、 POST 和 PUT。
GATEWAY_INTERFACE 服务器使用的 CGI 规格的修订。格式为 CGI/revision。
HTTP_<HeaderName> HeaderName 存储在标题文件中的值。未列入该表的标题文件必须以 HTTP_ 作为前缀,以使 ServerVariables 集合检索其值。
注意 服务器将 HeaderName 中的下划线(_)解释为实际标题中的破折号。例如,如果您指定 HTTP_MY_HEADER,服务器将搜索以 MY-HEADER 为名发送的标题文件。
HTTPS 如果请求穿过安全通道(SSL),则返回 ON。如果请求来自非安全通道,则返回 OFF。
HTTPS_KEYSIZE 安全套接字层连接关键字的位数,如 128。
HTTPS_SECRETKEYSIZE 服务器验证私人关键字的位数。如 1024。
HTTPS_SERVER_ISSUER 服务器验证的颁发者字段。
HTTPS_SERVER_SUBJECT 服务器验证的主字段。
INSTANCE_ID 文本格式 IIS 实例的 ID。如果实例 ID 为 1,则以字符形式出现。使用该变量可以检索请求所属的(元数据库中)Web 服务器实例的 ID。
INSTANCE_META_PATH 响应请求的 IIS 实例的元数据库路径。
LOCAL_ADDR 返回接受请求的服务器地址。如果在绑定多个 IP 地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要。
LOGON_USER 用户登录 Windows NT® 的帐号。
PATH_INFO 客户端提供的额外路径信息。可以使用这些虚拟路径和 PATH_INFO 服务器变量访问脚本。如果该信息来自 URL,在到达 CGI 脚本前就已经由服务器解码了。
PATH_TRANSLATED PATH_INFO 转换后的版本,该变量获取路径并进行必要的由虚拟至物理的映射。
QUERY_STRING 查询 HTTP 请求中问号(?)后的信息。
REMOTE_ADDR 发出请求的远程主机的 IP 地址。
REMOTE_HOST 发出请求的主机名称。如果服务器无此信息,它将设置为空的 MOTE_ADDR 变量。
REMOTE_USER 用户发送的未映射的用户名字符串。该名称是用户实际发送的名称,与服务器上验证过滤器修改过后的名称相对。
REQUEST_METHOD 该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST 等等。
SCRIPT_NAME 执行脚本的虚拟路径。用于自引用的 URL。
SERVER_NAME 出现在自引用 UAL 中的服务器主机名、DNS 化名或 IP 地址。
SERVER_PORT 发送请求的端口号。
SERVER_PORT_SECURE 包含 0 或 1 的字符串。如果安全端口处理了请求,则为 1,否则为 0。
SERVER_PROTOCOL 请求信息协议的名称和修订。格式为 protocol/revision 。
SERVER_SOFTWARE 应答请求并运行网关的服务器软件的名称和版本。格式为 name/version 。
URL 提供 URL 的基本部分。
注释
如果客户端发送的标题文件在上述表格中找不到,可以在调用 Request.ServerVariables 中给标题文件名加上 HTTP_ 的前缀以检索其值。例如,如果客户端发送标题文件
SomeNewHeader:SomeNewValue
您可以通过使用下面的语法检索 SomeNewValue
<% Request.ServerVariables("HTTP_SomeNewHeader") %>
您可使用重述符以循环遍历所有的服务器变量名。例如,使用下面的脚本打印出所有的服务器名。
<TABLE>
<TR><TD><B>Server Variable</B></TD><TD><B>Value</B></TD></TR>
<% For Each name In Request.ServerVariables %>
<TR><TD> <%= name %> </TD><TD> <%= Request.ServerVariables(name) %> </TD></TR>
</TABLE>
<% Next %>
示例
下面的例子使用 Request 对象显示一些服务器变量。
<HTML>
<!-- This example displays the content of several ServerVariables. -->
ALL_HTTP server variable =
<%= Request.ServerVariables("ALL_HTTP") %> <BR>
CONTENT_LENGTH server variable =
<%= Request.ServerVariables("CONTENT_LENGTH") %> <BR>
CONTENT_TYPE server variable =
<%= Request.ServerVariables("CONTENT_TYPE") %> <BR>
QUERY_STRING server variable =
<%= Request.ServerVariables("QUERY_STRING") %> <BR>
SERVER_SOFTWARE server variable =
<%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR>
</HTML>
下一个示例使用 ServerVariables 集合将服务器名插入一个超文本链接。
<A HREF = "http://<%= Request.ServerVariables("SERVER_NAME") %>
/scripts/MyPage.asp">Link to MyPage.asp</A>
属性
TotalBytes
TotalBytes 属性指定客户端在请求正文中发送的总字节数。该属性只允许读。
语法
Counter = Request.TotalBytes
参数
Counter
指定一个变量来接收客户端在请求中发送的总字节数。
示例
以下脚本设置一个等于请求对象中包括的总字节数的变量。
<%
Dim bytecount
bytecount = Request.TotalBytes
%>
方法
BinaryRead
BinaryRead 方法获取作为 POST 请求的一部分而从客户端传送到服务器的数据。此方法获取来自客户端的数据并将其储存在 SafeArray 中。SafeArray 是一个数组,其中包含维数和边界信息。
语法
variant = Request.BinaryRead(count)
参数
variant
包含由该方法返回的无符号数的数组。该参数的类型为 VT_ARRAY | VT_UI1。
count
在执行前,指定要从客户端读取的字节数。此方法返回后,count 将包含从客户机成功读取的字节数。实际读取的字节总数将小于或等于 Request.TotalBytes。
注释
BinaryRead 方法用于读取作为 POST 请求的一部分从客户端发出的未加工数据。此方法用于在底层访问数据,与此相反,Request.Form 集合用于查看在公告请求中发送的表格数据。一旦调用了 BinaryRead,则引用 Request.Form 集合中的任何变量都将导致错误发生。反之,一旦引用了 Request.Form 集合中的一个变量,则调用 BinaryWrite 也将导致错误发生。请记住,如果在访问 Request 集合中的变量时未指定该变量属于哪一个子集,将搜索 Request.Form 集合并强制使用上述规则。
示例
下列示例使用 BinaryRead 方法将请求的内容放入一个安全的数组中。
<%
Dim binread
Dim bytecount
bytecount = Request.TotalBytes
binread = Request.BinaryRead(bytecount)
%>
如果指定的变量不是上述的五个集合中的一个,Request 对象返回 EMPTY。
可以通过调用 Request(variable) 直接使用所有的变量,而不需要集合的名称。正因为这样,Web 服务器可以按照下面的顺序搜索集合。
QueryString
Form
Cookies
ClientCertificate
ServerVariables
如果同名的变量出现在多个集合中,Request 对象返回遇到的第一个实例。
我们建议在涉及 ServerVariables 集合的成员时使用全名。例如,不用 Request.(AUTH_USER) 而用Request.ServerVariables(AUTH_USER) 。
本文主题asp Request 对象 用户手册