[Indice]


El objeto Request

En inglés, request significa pedir, solicitar. En efecto, la acción de escribir una dirección cualquiera en la línea de URL de tu navegador, se traduce en solicitar un determinado fichero a un servidor, o dicho en la jerga técnica, se le hace un request al servidor. El protocolo que utiliza el navegador (por defecto salvo que se indique otro, como el FTP) para dialogar con un servidor web es el llamado HTTP, que como habrás visto figura al principio de todas las direcciones web. No es necesario escribir el protocolo en los navegadores modernos, simplemente escribimos la dirección de la página solicitada, y el navegador añade delante de la misma su protocolo por defecto. Por ejemplo, si escribes:

   sestud.uv.es/manual.esp/ el navegador compone http://sestud.uv.es/manual.esp/

El objeto Request permite el acceso a toda la información que pasa desde el navegador del cliente al servidor. Al recibir esta información, es repartida y almacenada entre cinco colecciones. Cada colección es similar en estructura a una tabla de datos (también llamada matriz de datos o array). Los datos, una vez cargados, pueden ser accedidos individualmente en cada colección a través de una única clave asignada a cada item.

Todas las variables pueden ser accedidas directamente mediante una llamada del tipo Request(variable) sin mencionar el nombre de la colección. En este caso, el servidor web busca entre todas las colecciones la clave pedida (variable), buscando por este orden:

    QueryString, Form, Cookies, ClientCertificate y ServerVariables que son las cinco colecciones que tiene el objeto.

El objeto Request tiene 1 propiedad, 5 colecciones y 1 método:


PROPIEDADES

Request.TotalBytes

Esta propiedad, de solo lectura, indica el número total de bytes enviados por el cliente al servidor en el cuerpo de la llamada HTTP. Se escribe:

'---fichero.htm
<HTML>
<HEAD><TITLE>PRUEBA</TITLE></HEAD>
<BODY>
<FORM ACTION="prueba.asp" METHOD="POST">
Texto:<INPUT TYPE="Text" NAME="texto" VALUE="esto es una prueba"><BR>
<INPUT TYPE="Submit" VALUE="Probar"><BR>
</FORM>
</BODY>
</HTML>

'--fichero prueba.asp
<%
Dim Cuantos
Cuantos = Request.TotalBytes
Response.Write("Se han recibido = " & Cuantos & " bytes")
%>


COLECCIONES

Request.ClientCertificate(clave)

Esta colección tiene utilidad si estamos escribiendo una aplicación que utiliza el protocolo Secure Socket Layers (SSL). Este protocolo, que da una mayor seguridad en las transacciones electrónicas, se invoca con el prefijo https:// en lugar del típico http://, y está basado en el envío de certificados electrónicos del servidor al cliente para asegurar la identidad del mismo. Como en otras colecciones, es posible listar todos sus items con un bucle For Each item in ... Next ya vistos en otros objetos.

El argumento clave es un string (cadena de texto) que especifica el nombre del item que se desea recibir, y hay que escribirlo entre comillas dobles ("). Un certificado es como un registro que contiene los siguientes campos:

Por ejemplo, para obtener las fechas de validez de un certificado, se escribe:

<HTML>
<HEAD> <TITLE>Prueba de certificado</TITLE> </HEAD>
<BODY>
El certificado es válido desde <%= Request.ClientCertificate("ValidFrom") %> hasta
<%= Request.ClientCertificate("ValidUntil") %>.
</BODY>
</HTML>

Y este sería el resultado:

El certificado es válido desde 9/30/98 11:59:59 PM hasta 9/30/99 11:59:59 PM.


Request.Cookies(clave)

La colección Cookies (literalmente "galleta") asigna datos a un cookie existente, y si éste no existe, crea uno nuevo donde almacena estos datos. Y te estarás preguntando que es eso de las "galletas" y dónde están... No, no es que tu navegador se haya convertido en un monstruo devorador de galletas. Aclaremos esto un poco:

Anteriormente se ha dicho que el HTML normal no precisa información específica sobre las características de los clientes, ya que son contenidos estáticos iguales para todos ellos, es como leer un tablón de anuncios; no hay interactividad entre el tablón y el lector. Todo se reduce a lanzar una petición del cliente al servidor, y éste la contesta siempre igual, sin personalización alguna.

¿Pero qué ocurre si se trata de una aplicación que maneja datos personales, que sólo han de mostrarse al cliente correcto, y que utiliza varios formularios complejos cuyos datos han de integrarse en un único registro? Pues en ese caso, ya no da igual qué cliente hace las preguntas, y hay que estar seguro de a quien se envian los datos. Mantener, en cierto modo, una conversación, conseguir que el servidor recuerde contínuamente ciertos datos del cliente que le permitan comportarse de forma un tanto "inteligente", en suma, personalizando la sesión.

Para eso, ASP establece una sesión individual y personalizada con cada cliente, almacenando tantas variables de sesión como sea preciso en el propio servidor, y creando un identificador único para cada sesión de un cliente. Este identificador no ha de ser guardado en el servidor, sino en el cliente, y permitirá al servidor reconocer de forma eficaz a su interlocutor. Los identificadores, junto con otras informaciones, como el modelo de navegador, versión del mismo, características de configuración que tiene activas, dirección IP del cliente, etc., se guardan en unos pequeños ficheros de texto llamados Cookies. Un problema que a menudo surge, es que el cliente ha deshabilitado la opción de aceptar cookies en su navegador, lo que imposibilita el buen funcionamiento de ASP, ya que no puede guardar los datos del identificador de sesión, cuestión clave para que todo marche correctamente.

Y ahora que ya sabes algo más sobre las galletas, veamos como se utiliza esta colección, usando como siempre un bucle:

<%
For Each Item In Request.Cookies
   Response.Write Item & " = " & Request.Cookies(Item) & "<br>"
Next
%>

Y este podría ser un resultado, ya que el contenido de la colección no es fijo, depende del navegador del cliente, de la aplicación, etc.,:

PRD2 = VBScript
PRD1 = ASP

Por defecto, siempre que se invoca una página ASP se crea un objeto Session, pero puede ocurrir que no sea necesario establecer sesion con los usuarios, por ejemplo, si el contenido de la página es estático o no precisa enviar cookies. Para evitar que ASP abra una sesión basta con escribir en la primera línea de la página lo siguiente:

<%@ EnableSessionState=False%>

Pero recuerda que de esta forma no se pueden generar cookies. Para saber cómo crear y modificar cookies hay que referirse a las colecciones del objeto Response


Request.Form("Elemento o indice")[.Count]

El contenido de esta colección está formado por todos los elementos de un formulario típico escrito en HTML, donde Elemento es el nombre del elemento del formulario que se quiere recibir desde el navegador (un campo) y Count contiene el número de elementos. En lugar del nombre del elemento, se puede escribir su número de índice, comenzando por el 1.

Supongamos que tenemos el siguiente formulario HTML con tres campos:

'---Fichero formulario.htm
<HTML><HEAD> <TITLE>Prueba1 ASP</TITLE> </HEAD>
<BODY>
<FORM ACTION="prueba2.asp" METHOD="POST">
Nombre:<INPUT TYPE="text" NAME="Nombre" VALUE="Juan Garcia" ><br>
Ciudad:<INPUT TYPE="text" NAME="Ciudad" VALUE="Guadalajara" ><br>
Postal:<INPUT TYPE="text" NAME="Postal" VALUE="12345"       ><br>
<INPUT TYPE="Submit" VALUE="Enviar">
</FORM>
</BODY>
</HTML>

Para poder ver el nombre de los campos y sus contenidos se escribe lo siguiente:

'---Fichero prueba2.asp
<HTML><HEAD> <TITLE>Prueba2 ASP</TITLE> </HEAD>
<BODY>
<%
Response.Write "Número de elementos: " & Request.Form.Count & "<BR>"
Response.Write "Nombre: " & Request.Form("Nombre") & "<BR>"
Response.Write "Ciudad: " & Request.Form("Ciudad") & "<BR>"
Response.Write "Postal: " & Request.Form("Postal") & "<BR>"
Response.Write "<P>"
Response.Write "Nombre: " & Request.Form(1) & "<BR>"
Response.Write "Ciudad: " & Request.Form(2) & "<BR>"
Response.Write "Postal: " & Request.Form(3) & "<BR>"
%>
</BODY>
</HTML>

Este sería el resultado:

Número de elementos: 3
Nombre: Juan Garcia
Ciudad: Guadalajara
Postal: 12345

Nombre: Juan Garcia
Ciudad: Guadalajara
Postal: 12345

Se puede obtener toda la colección de valores de los campos sin indicar sus nombres, pero no está previsto obtener la colección de los nombres. Si algun nombre de campo existe más de una vez, sus valores aparecen juntos separados por comas. Por ejemplo:

'---Fichero link.htm
<HTML><HEAD> <TITLE>Prueba1 ASP</TITLE> </HEAD>
<BODY>
<FORM ACTION="prueba2.asp" METHOD="POST">
Nombre1:<INPUT TYPE="text" NAME="Nombre" VALUE="Juan" ><br>
Nombre2:<INPUT TYPE="text" NAME="Nombre" VALUE="Maria" ><br>
Nombre3:<INPUT TYPE="text" NAME="Nombre" VALUE="Pedro" ><br>
Ciudad:<INPUT TYPE="text" NAME="Ciudad" VALUE="Guadalajara" ><br>
Postal:<INPUT TYPE="text" NAME="Postal" VALUE="12345"       ><br>
<INPUT TYPE="Submit" VALUE="Enviar">
</FORM>
</BODY>
</HTML>

Para ver el contenido de los campos sin nombrarlos se escribe lo siguiente:

'---Fichero prueba.asp
<HTML><HEAD> <TITLE>Prueba2 ASP</TITLE> </HEAD>
<BODY>
<%
Total = Request.Form().Count

For x = 1 To Total
  Response.Write( Request.Form(x) & "<br>" )
Next
%>
</BODY>
</HTML>

Este sería el resultado:

Juan,Maria,Pedro
Guadalajara
12345


Request.QueryString("Elemento o indice")[.Count]

El Query String no es otra cosa que el string (cadena de texto) que se escribe en la ventana de URL del navegador. Es decir, esa en la que se escribe la dirección del servidor donde está la página que deseamos recibir. Por ejemplo:

      http://sestud.uv.es/manual.esp/indice.htm  <-- esto es un Query String

Posiblemente te preguntes cómo hacer una colección sólo con eso. Pues en efecto, sólo con eso no hay colección, pero ASP, y otros sistemas de script (también el IDC, visto en páginas anteriores), utilizan esa línea para transportar información adicional, y es con esos datos adicionales con los que se creará la colección. He aquí un ejemplo típico de Querystring. Analicémoslo:

http://sestud.uv.es/manual.esp/indice.htm?Nombre=Juan+Garcia&Ciudad=Guadalajara&Postal=12345

Esto ya es otra cosa.... y casi se explica por sí mismo. La primera parte, está claro que es la dirección y no forma parte de la colección. Todo comienza a partir del interrogante (?) que hay después de la página (indice.htm), que por cierto, debe ser una página .asp o .idc, si es .htm todo esto no funciona, ya que es la extensión la que indica al servidor que hay código que debe ser interpretado y ejecutado. Al igual que en la colección anterior, tenemos un nombre de campo: Nombre y a continuación del signo igual (=) está su valor: Juan Garcia. Después aparece el signo (&), que indica el fin del campo y el comienzo de otro. El siguiente campo es Ciudad con su valor: Guadalajara, un nuevo signo de separación, y el último campo: Postal con su correspondiente valor: 12345.

Este sistema se utiliza para acceder a índices, pasar parámetos de consultas a bases de datos, localizar números de página, etc. Es decir, contenidos relativamente cortos, ya que en total su longitud sólo puede tener 255 caracteres. Para mover contenidos largos, se debe utilizar formularios y la colección Request.Form vista anteriormente.

Para utilizar esta colección no necesitamos un formulario, simplemente un link definido con el elemento <A> .. </A> Supongamos que tenemos la siguiente página HTML:

'---Fichero link.htm
<HTML><HEAD> <TITLE>Prueba1 ASP</TITLE> </HEAD>
<BODY>
Prueba de <A HREF="http://sestud.uv.es/manual.esp/prueba.asp
?Nombre=Juan+Garcia&Ciudad=Guadalajara&Postal=12345">Request.QueryString</A>
</BODY>
</HTML>

Para poder ver el nombre de los campos y sus contenidos se escribe lo siguiente:

'---Fichero prueba.asp
<HTML><HEAD> <TITLE>Prueba2 ASP</TITLE> </HEAD>
<BODY>
<%
Response.Write "Número de elementos: " & Request.QueryString.Count & "<BR>"
Response.Write "Nombre: " & Request.QueryString("Nombre") & "<BR>"
Response.Write "Ciudad: " & Request.QueryString("Ciudad") & "<BR>"
Response.Write "Postal: " & Request.QueryString("Postal") & "<BR>"
Response.Write "<P>"
Response.Write "Nombre: " & Request.QueryString(1) & "<BR>"
Response.Write "Ciudad: " & Request.QueryString(2) & "<BR>"
Response.Write "Postal: " & Request.QueryString(3) & "<BR>"
%>
</BODY>
</HTML>

Este sería el resultado:

Número de elementos: 3
Nombre: Juan Garcia
Ciudad: Guadalajara
Postal: 12345

Nombre: Juan Garcia
Ciudad: Guadalajara
Postal: 12345

En este ejemplo, el contador de elementos no está contando los elementos que hay, sino el número de elementos con el mismo nombre que hay. Así pues, si, por ejemplo, repetimos el campo "Nombre" dos veces en el query string, el contador sguiría mostrando 3.

Fíjate ahora en la línea de string con los campos, concretamente el campo Nombre y su contenido:

<%
?Nombre=Juan+Garcia&Ciudad=Guadalajara&Postal=12345
%>

El contenido del campo Nombre parece que esté "sumado". En realidad el signo + que aparece separando Juan y Garcia funciona aquí como concatenador, igual que ocurre en los ficheros .idc vistos anteriormente, ya que en el query string no puede haber espacios en blanco y el signo & que se utiliza en ASP y VBScript para concatenar, aquí es el separador de campos.

Se puede obtener toda la colección de valores de los campos sin indicar sus nombres, pero no está previsto obtener la colección de los nombres. Si algun nombre de campo existe más de una vez, sus valores aparecen juntos separados por comas. Por ejemplo:

'---Fichero link.htm
<HTML><HEAD> <TITLE>Prueba1 ASP</TITLE> </HEAD>
<BODY>
Prueba de <A HREF="http://sestud.uv.es/manual.esp/prueba.asp
?Nombre=Juan&Nombre=Maria&Nombre=Pedro&Ciudad=Guadalajara&Postal=12345">Request.QueryString</A>
</BODY>
</HTML>

Para ver el contenido de los campos sin nombrarlos se escribe lo siguiente:

'---Fichero prueba.asp
<HTML><HEAD> <TITLE>Prueba2 ASP</TITLE> </HEAD>
<BODY>
<%
Total = Request.QueryString().Count

For x = 1 To Total
  Response.Write( Request.QueryString(x) & "<br>" )
Next
%>
</BODY>
</HTML>

Este sería el resultado:

Juan,Maria,Pedro
Guadalajara
12345


Request. ServerVariables("Variable")

Esta colección contiene el valor de las variables de entorno del servidor. Hay muchas, y posiblemente no las utilices nunca, por lo que sólo se mencionarán algunas. Como todas las demás pueden listarse con el bucle For Each item in ... Next . Los valores del argumento "Variable" pueden ser, entre otros, los siguientes:

Por ejemplo:

<%
Response.Write Request.ServerVariables("REMOTE_ADDR")
%>

Este podría ser un resultado:

125.125.125.125


METODOS

Request.BinaryRead(Count)

Este método recupera los datos que han sido enviados al servidor desde el cliente formando parte de un request HTTP POST (por ejemplo, con un formulario).

El argumento Count es obligatorio. Antes de que el método sea ejecutado, Count contiene el número de bytes que tienen que ser leidos. Después de la ejecución contiene el actual número de bytes leidos. Se utiliza poco, y su principal uso es cuando se envía (upload) un fichero, para comprobar que llegó completo.


[Indice]