# VRequest

VRequest es un objeto javascript que representa una petición realizada a través de web a Velneo vModApache.

theRequest se crea automáticamente para cada petición realizada, y permite acceder a la petición para obtener información y preparar la respuesta.

Con ayuda de la clase [VResponse](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vresponse), podremos definir la respuesta.

De esta forma podemos gestionar de forma dinámica las peticiones web en un servidor Apache con Velneo vModApache.

## Funciones

**De cabecera**

| Retorno | Función                              |
| ------- | ------------------------------------ |
| String  | [header](#header)( String szHeader ) |
| Array   | [headerKeys](#headerkeys)()          |

**De GET**

| Retorno | Función                     |
| ------- | --------------------------- |
| String  | [GET](#get)( String szKey ) |
| Array   | [GETkeys](#getkeys)()       |

**De POST**

| Retorno | Función                       |
| ------- | ----------------------------- |
| String  | [POST](#post)( String szKey ) |
| Array   | [POSTKeys](#postkeys)()       |

**De URI**

| Retorno | Función                       |
| ------- | ----------------------------- |
| String  | [pathInfo](#pathinfo)()       |
| String  | [unparsedUri](#unparseduri)() |
| String  | [uri](#uri)()                 |

**De cuerpo**

| Retorno                                                                                                | Función               |
| ------------------------------------------------------------------------------------------------------ | --------------------- |
| String                                                                                                 | [body](#body)()       |
| String                                                                                                 | [method](#method)()   |
| [VByteArray](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray) | [rawBody](#rawbody)() |

## Documentación de funciones

### Funciones de cabecera

#### String header( String szHeader ) <a href="#header" id="header"></a>

Devuelve el valor de la cabecera que indicamos como parámetro.

Parámetros:

* szHeader: cadena con el nombre de la cabecera cuyo valor queremos obtener.

#### Array headerKeys() <a href="#headerkeys" id="headerkeys"></a>

Devuelve un array de cadenas que contiene los nombres de cabecera obtenidos de la petición.

### Funciones de GET

#### String GET( String szKey ) <a href="#get" id="get"></a>

Devuelve el valor correspondiente a la variable cuyo nombre indicamos como parámetro.

Parámetros:

* szKey: cadena con el nombre de la variable cuyo valor queremos obtener.

#### Array GETkeys() <a href="#getkeys" id="getkeys"></a>

Devuelve un array de cadenas con los nombres de las variables recibidas en la petición.

### Funciones de POST

#### String POST( String szKey ) <a href="#post" id="post"></a>

Devuelve el valor correspondiente a la variable cuyo nombre indicamos como parámetro.

Parámetros:

* szKey: cadena con el nombre de la variable cuyo valor queremos obtener.

{% hint style="info" %}
Esta función es válida para el método x-www-form-urlencoded.
{% endhint %}

Para multipart/form debemos procesar la salida de la función body().

#### Array POSTKeys() <a href="#postkeys" id="postkeys"></a>

Devuelve un array de cadenas con los nombres de las variables recibidas en la petición.

{% hint style="info" %}
Esta función es válida para el método x-www-form-urlencoded.
{% endhint %}

Para multipart/form debemos procesar la salida de la función body().

### Funciones de URI

#### String pathInfo() <a href="#pathinfo" id="pathinfo"></a>

Devuelve de la petición la parte correspondiente a la senda.

```javascript
// Ejemplo para url: PROCESO.PRO?pp=1
pathInfo() = /PROCESO.PRO
```

#### String unparsedUri() <a href="#unparseduri" id="unparseduri"></a>

Devuelve la URI completa sin parsear.

```javascript
// Ejemplo para url: PROCESO.PRO?pp=1
unparsedUri() = /velneo/PROCESO.PRO?pp=1
```

#### String uri() <a href="#uri" id="uri"></a>

Devuelve de la petición la URI completa sin las variables.

```javascript
// Ejemplo para url: PROCESO.PRO?pp=1
uri() = /velneo/PROCESO.PRO
```

### Funciones de cuerpo

#### String body() <a href="#body" id="body"></a>

Devuelve el contenido del cuerpo de la petición.

{% hint style="success" %}
La salida de la función body() es string, por lo que los ficheros binarios han de enviarse codificados en Base64.
{% endhint %}

#### String method() <a href="#method" id="method"></a>

Devuelve el método correspondiente a la petición.

#### VByteArray rawBody() <a href="#rawbody" id="rawbody"></a>

Devuelve el contenido del cuerpo de la petición como binario en un objeto de la clase [VByteArray](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray).

## Ejemplos

### Ejemplo de manejo de binarios

```javascript
// Creamos el objeto de la clase VByteArray para recibir el cuerpo binario
var baBody= new VByteArray;

// Obtenemos el cuerpo binario
baBody = theRequest.rawBody();

// Procesamos lo obtenido
var length = baBody.length;
var firstChar = baBody[0];
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vrequest.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
