Request
=======

La interfaz **`Request`** de la API Fetch representa una solicitud de respuesta.

Puedes crear un nuevo objeto `Request` usando el constructor `Request.Request()` (en-US), pero es preferible encontrar un objeto `Request` que sea devuelto como el resultado de otra operacion API, como un operador de servicio `FetchEvent.request` (en-US).

Constructor
-----------

`Request.Request()` (en-US)

Crea un nuevo objeto `Request`.

Propiedades
-----------

`Request.method` (en-US) Read only 

Contiene el metodo de solicitud (`GET`, `POST`, etc.)

`Request.url` (en-US) Read only 

Contiene la URL de la solicitud.

`Request.headers` Read only 

Contiene el objeto asociado de la solicitud `Headers` (en-US)

`Request.context` (en-US) Read only  
Obsoleto

Contiene el contexto de la solicitud (p.ej., `audio`, `image`, `iframe`, etc.)

`Request.referrer` (en-US) Read only 

Contiene la referencia de la soliditud (p.ej., `client`).

`Request.referrerPolicy` (en-US) Read only 

Contiene la política de referencia de la solicitud (p.ej., `no-referrer`).

`Request.mode` (en-US) Read only 

Contiene el modo de la solicitud. (p.ej., `cors`, `no-cors`, `same-origin`, `navigate`.)

`Request.credentials` (en-US) Read only 

Contiene las credenciales de la solicitud (p.ej., `omit`, `same-origin`).

`Request.redirect` (en-US) Read only 

Contiene el modo de cómo son manipuladas las redirecciones. Puede ser `follow`, `error`, o `manual`.

`Request.integrity` (en-US) Read only 

Contiene el valor del subrecurso de integridad (subresource integrity (en-US)) de la solicitud (p.ej., `sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=`).

`Request.cache` (en-US) Read only 

Contiene el modo de caché de la solicitud (p.ej., `default`, `reload`, `no-cache`).

`Request` implementa `Body`, por lo que también tiene las siguientes propiedades disponibles:

`Body.body` (en-US) Read only 

Un simple getter usado para exponer un contenido del cuerpo `ReadableStream` (en-US)

`Body.bodyUsed` (en-US) Read only 

Almacena un `Boolean` (en-US) que declara si ya se ha usado el cuerpo en una respuesta.

Métodos
-------

`Request.clone()` (en-US)

Crea una copia del objeto actual `Request`.

`Request` implementa `Body`, por lo que también tiene los siguientes métodos disponibles:

`Body.arrayBuffer()` (en-US)

Devuelve una promesa que se resuelve con una representación `ArrayBuffer` del cuerpo de la solicitud.

`Body.blob()` (en-US)

Devuelve una promesa que se resuelve con una representación `Blob` del cuerpo de la solicitud.

`Body.formData()` (en-US)

Devuelve una promesa que se resuelve con una representación `FormData` del cuerpo de la solicitud.

`Body.json()` (en-US)

Devuelve una promesa que se resuelve con una representación `JSON` del cuerpo de la solicitud.

`Body.text()` (en-US)

Devuelve una promesa que se resuelve con una representación `USVString` (en-US) (text) del cuerpo de la solicitud.


**Nota:** Las funciones `Body` solo pueden ser ejecutadas una vez; Las siguientes llamadas se resolverán con strings/ArrayBuffers vacíos.

Ejemplos
--------

En el siguiente fragmento de código, creamos una nueva solicitud utilizando el constructor `Request()` (para un archivo de imagen en el mismo directorio que el script), luego devolvemos algunos valores de propiedad de la solicitud:


```js
const myRequest = new Request("http://localhost/flowers.jpg");

const myURL = myRequest.url; // http://localhost/flowers.jpg
const myMethod = myRequest.method; // GET
const myCred = myRequest.credentials; // omit
```


Puede obtener esta solicitud pasando el objeto `Request` como parámetro a una llamada `GlobalFetch.fetch()` (en-US), por ejemplo:


```js
fetch(myRequest)
  .then((response) => response.blob())
  .then((blob) => {
    myImage.src = URL.createObjectURL(blob);
  });
```


En el siguiente fragmento de código, creamos una nueva solicitud utilizando el constructor `Request()` con algunos datos iniciales y contenido del cuerpo para una solicitud de API que necesita una carga útil del cuerpo:


```js
const myRequest = new Request("http://localhost/api", {
  method: "POST",
  body: '{"foo":"bar"}',
});

const myURL = myRequest.url; // http://localhost/api
const myMethod = myRequest.method; // POST
const myCred = myRequest.credentials; // omit
const bodyUsed = myRequest.bodyUsed; // true
```


**Nota:** El tipo de cuerpo solo puede ser `Blob`, `BufferSource`, `FormData`, `URLSearchParams`, `USVString` (en-US) o tipo `ReadableStream` (en-US), así que para añadir un objeto JSON a la carga útil, necesitas convertir a string (stringify) dicho objeto.

Puede obtener esta solicitud de API pasando el objeto `Request` como parámetro a una llamada `GlobalFetch.fetch()` (en-US), por ejemplo, y obtener la respuesta:


```js
fetch(myRequest)
  .then((response) => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error("Something went wrong on api server!");
    }
  })
  .then((response) => {
    console.debug(response);
    // ...
  })
  .catch((error) => {
    console.error(error);
  });
```

Especificaciones
----------------

| Specification |
| --- |
| Fetch Standard # request-class |

Compatibilidad con navegadores
------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Ver también
-----------

* ServiceWorker API (en-US)
* HTTP access control (CORS)
* HTTP