# Opciones de contexto de HTTP

Opciones de contexto de HTTP — Listado de opciones de contexto de HTTP

### Descripción

Opciones de contexto para los transportes `http://` y `https://`.

### Opciones

`method` string

  `GET`, `POST`, o cualquier otro método HTTP que admita el servidor remoto.

  Por omisión, `GET`.

`header` string

  Las cabeceras adicionales que se envían en la petición. Los valores de esta opción sobrescribirán los existentes (tales como `User-agent:`, `Host:`, o `Authentication:`).

`user_agent` string

  Valor de la cabecera `User-Agent:`. Solo se utilizará si el agente no se ha especificado en la opción de contexto `header` vista arriba.

  Por omisión, se utiliza el valor del ajuste user_agent de php.ini.

`content` string

  Datos adicionales a enviar tras las cabeceras. Típicamente se utiliza con peticiones POST o PUT.

`proxy` string

  El URI que define la dirección de un servidor proxy (p.ej. `tcp://proxy.example.com:5100`).

`request_fulluri` boolean

  Cuando se establece a `true`, se utilizará todo el URI para construir la petición, (es decir, `GET http://www.example.com/path/to/file.html HTTP/1.0`). A pesar de que es un formato de petición no estándar, algunos servidores proxy requieren que sea así.

  Por omisión es `false`.

`follow_location` integer

  Seguir las redirecciones de las cabeceras `Location`. Establecer a `0` para deshabilitarlo.

  Por omisión es `1`.

`max_redirects` integer

  El número máximo de redirecciones a seguir. Un valor igual o menor a `1` indica que no se siga ninguna redirección.

  Por omisión es `20`.

`protocol_version` float

  La versión del protocolo HTTP.

  Por omisión es `1.0`.

  > Nota:

  > Las versiónes de PHP anteriores a la 5.3.0 no implementan la decodificación de transferencias fragmentadas. Si este valor es `1.1`, es responsabilidad del programador cumplir con la versión `1.1`.

`timeout` float

  El tiempo de espera de lectura en segundos, especificado por un float (p.ej. `10.5`).

  Por omisión, se utiliza el valor del ajuste default_socket_timeout de php.ini.

`ignore_errors` boolean

  Obtener el contenido incluso con códigos de estado de error.

  Por omisión es `false`.

### Historial de cambios

Versión | Descripción
--- | ---
5.3.4 | Se añadió `follow_location`.
5.3.0 | La opción `protocol_version` admite la decodificación de transferencias fragmentadas en caso de valer `1.1`.
5.2.10 | Se añadió `ignore_errors`.
5.2.10 | El parámetro `header` ahora puede ser un array de índices numéricos.
5.2.1 | Se añadió `timeout`.
5.1.0 | Se añadió el soporte de HTTPS mediante proxies HTTP.
5.1.0 | Se añadió `max_redirects`.
5.1.0 | Se añadió `protocol_version`.

### Ejemplos

Ejemplo #1 Obtener una página y enviar datos POST

`<?php
$datos_post = http_build_query(
array(
'var1' => 'contenido',
'var2' => 'doh'
)
);
$opciones = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $datos_post
)
);
$contexto = stream_context_create($opciones);
$resultado = file_get_contents('http://example.com/submit.php', false, $contexto);
?>`

Ejemplo #2 Ignorar las redirecciones, aunque obtener las cabeceras y el contenido

`<?php
$url = "http://www.example.org/header.php";
$opciones = array('http' =>
array(
'method' => 'GET',
'max_redirects' => '0',
'ignore_errors' => '1'
)
);
$contexto = stream_context_create($opciones);
$flujo = fopen($url, 'r', false, $contexto);
// información de cabeceras y meta datos
// sobre el flujo
var_dump(stream_get_meta_data($flujo));
// datos reales en $url
var_dump(stream_get_contents($flujo));
fclose($flujo);
?>`

### Notas

> Nota: Opciones de contexto del flujo de socket subyacente
> Se pueden admitir opciones de contexto adicionales mediante el transporte subyacente. Para flujos `http://`, deben consultarse las opciones de contexto del transporte `tcp://`. Para flujos `https://`, deben consultarse las opciones de contexto del transporte `ssl://`.

> Nota: Línea de estado HTTP
> Cuando esta envultura de flujo sigue una redirección, los datos en `wrapper_data` devueltos por stream_get_meta_data() podrían no contener necesariamente la línea de estado HTTP que realmente se aplica a los datos del contenido del índice `0`.

>     array (
>       'wrapper_data' =>
>       array (
>         0 => 'HTTP/1.0 301 Moved Permantenly',
>         1 => 'Cache-Control: no-cache',
>         2 => 'Connection: close',
>         3 => 'Location: http://example.com/foo.jpg',
>         4 => 'HTTP/1.1 200 OK',
>         ...

> La primera petición devolvió un `301` (redirección permanente), de manera que la envoltura del flujo sigue automáticamente la redirección para obtener una respuesta de código `200` (índice = `4`).

### Ver también

- http://
- Opciones de contexto de sockets
- Opciones de contexto para SSL