TigerZF
🌐Español

Capítulo 38. Zend_Http

Tabla de contenidos

38.1. Introducción
38.1.1. Usando Zend_Http_Client
38.1.2. Parámetros de configuración
38.1.3. Realizar peticiones HTTP básicas
38.1.4. Añadir parámetros GET y POST
38.1.5. Acceder a la última petición y respuesta
38.2. Zend_Http_Client - Uso avanzado
38.2.1. Redirecciones HTTP
38.2.2. Añadir cookies y usar la persistencia de cookies
38.2.3. Establecer cabeceras de petición personalizadas
38.2.4. Subida de archivos
38.2.5. Enviar datos POST en bruto
38.2.6. Autenticación HTTP
38.2.7. Enviar múltiples peticiones con el mismo cliente
38.2.8. Transmisión de datos (streaming)
38.3. Zend_Http_Client - Adaptadores de conexión
38.3.1. Resumen
38.3.2. El adaptador Socket
38.3.2.1. Personalizar y acceder al contexto de flujo del adaptador Socket
38.3.3. El adaptador Proxy
38.3.4. El adaptador cURL
38.3.5. El adaptador de pruebas (Test)
38.3.6. Crear sus propios adaptadores de conexión
38.4. Zend_Http_Cookie y Zend_Http_CookieJar
38.4.1. Introducción
38.4.2. Instanciar objetos Zend_Http_Cookie
38.4.3. Métodos getter de Zend_Http_Cookie
38.4.4. Zend_Http_Cookie: comparación con un escenario
38.4.5. La clase Zend_Http_CookieJar: instanciación
38.4.6. Añadir cookies a un objeto Zend_Http_CookieJar
38.4.7. Recuperar cookies de un objeto Zend_Http_CookieJar
38.5. Zend_Http_Response
38.5.1. Introducción
38.5.2. Métodos de prueba booleanos
38.5.3. Métodos de acceso
38.5.4. Analizadores estáticos de respuestas HTTP
38.6. Zend_Http_UserAgent
38.6.1. Resumen
38.6.2. Inicio rápido
38.6.3. Opciones de configuración
38.6.4. Métodos disponibles
38.6.5. Ejemplos
38.7. La interfaz UserAgent Device
38.7.1. Resumen
38.7.2. Inicio rápido
38.7.3. Opciones de configuración
38.7.4. Métodos disponibles
38.7.5. Ejemplos
38.8. El adaptador UserAgent Features
38.8.1. Resumen
38.8.2. Inicio rápido
38.8.3. Opciones de configuración
38.8.4. Métodos disponibles
38.9. El adaptador UserAgent Features de Browscap
38.9.1. Resumen
38.9.2. Inicio rápido
38.9.3. Opciones de configuración
38.9.4. Métodos disponibles
38.10. El adaptador UserAgent Features de DeviceAtlas
38.10.1. Resumen
38.10.2. Inicio rápido
38.10.3. Opciones de configuración
38.10.4. Métodos disponibles
38.11. El adaptador UserAgent Features de TeraWurfl
38.11.1. Resumen
38.11.2. Inicio rápido
38.11.3. Opciones de configuración
38.11.4. Métodos disponibles
38.12. La interfaz UserAgent Storage
38.12.1. Resumen
38.12.2. Inicio rápido
38.12.3. Opciones de configuración
38.12.4. Métodos disponibles
38.13. El adaptador UserAgent Storage de Session
38.13.1. Resumen
38.13.2. Inicio rápido
38.13.3. Opciones de configuración
38.13.4. Métodos disponibles

38.1. Introducción

Zend_Http_Client proporciona una interfaz sencilla para realizar peticiones del protocolo de transferencia de hipertexto (HTTP). Zend_Http_Client soporta la mayoría de las características simples esperadas de un cliente HTTP, así como algunas características más complejas, como la autenticación HTTP y la subida de archivos. Las peticiones exitosas (y la mayoría de las fallidas también) devuelven un objeto Zend_Http_Response, que proporciona acceso a las cabeceras y al cuerpo de la respuesta (vea esta sección).

38.1.1. Usando Zend_Http_Client

El constructor de la clase acepta opcionalmente una URL como su primer parámetro (puede ser tanto una cadena como un objeto Zend_Uri_Http), y un array u objeto Zend_Config que contenga las opciones de configuración. Ambos pueden omitirse, y establecerse más tarde usando los métodos setUri() y setConfig().

Ejemplo 38.1. Instanciar un objeto Zend_Http_Client

$client = new Zend_Http_Client('http://example.org', array(
    'maxredirects' => 0,
    'timeout'      => 30));

// This is actually exactly the same:
$client = new Zend_Http_Client();
$client->setUri('http://example.org');
$client->setConfig(array(
    'maxredirects' => 0,
    'timeout'      => 30));

// You can also use a Zend_Config object to set the client's configuration
$config = new Zend_Config_Ini('httpclient.ini', 'secure');
$client->setConfig($config);


[Note] Nota

Zend_Http_Client usa Zend_Uri_Http para validar las URLs. Esto significa que algunos caracteres especiales como el símbolo de barra vertical ('|') o el símbolo de intercalación ('^') no serán aceptados en la URL por defecto. Esto puede modificarse estableciendo la opción 'allow_unwise' de Zend_Uri a 'TRUE'. Vea esta sección para más información.

38.1.2. Parámetros de configuración

El constructor y el método setConfig() aceptan un array asociativo de parámetros de configuración, o un objeto Zend_Config. Establecer estos parámetros es opcional, ya que todos tienen valores por defecto.

Tabla 38.1. Parámetros de configuración de Zend_Http_Client

Parámetro Descripción Valores esperados Valor por defecto
maxredirects Número máximo de redirecciones a seguir (0 = ninguna) integer 5
strict Indica si se realiza validación de los nombres de las cabeceras. Cuando se establece a FALSE, las funciones de validación se omitirán. Normalmente esto no debería cambiarse boolean TRUE
strictredirects Indica si se debe seguir estrictamente el RFC al redireccionar (vea esta sección) boolean FALSE
useragent Cadena identificadora del agente de usuario (enviada en las cabeceras de la petición) string 'Zend_Http_Client'
timeout Tiempo de espera de la conexión (segundos) integer 10
httpversion Versión del protocolo HTTP (normalmente '1.1' o '1.0') string '1.1'
adapter Clase adaptadora de conexión a usar (vea esta sección) mixed 'Zend_Http_Client_Adapter_Socket'
keepalive Indica si se deben habilitar las conexiones keep-alive con el servidor. Útil y puede mejorar el rendimiento si se realizan varias peticiones consecutivas al mismo servidor. boolean FALSE
storeresponse Indica si se debe almacenar la última respuesta para su posterior recuperación con getLastResponse(). Si se establece a FALSE getLastResponse() devolverá NULL. boolean TRUE
encodecookies Indica si se debe pasar el valor de la cookie a través de urlencode/urldecode. Habilitar esto rompe la compatibilidad con algunos servidores web. Deshabilitarlo limita el rango de valores que pueden contener las cookies. boolean TRUE


38.1.3. Realizar peticiones HTTP básicas

Realizar peticiones HTTP simples es muy fácil de hacer usando el método request(), y rara vez necesita más de tres líneas de código:

Ejemplo 38.2. Realizar una petición GET simple

$client = new Zend_Http_Client('http://example.org');
$response = $client->request();


El método request() toma un parámetro opcional: el método de petición. Puede ser GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS o CONNECT tal como se definen en el protocolo HTTP [6]. Para mayor comodidad, todos ellos están definidos como constantes de clase: Zend_Http_Client::GET, Zend_Http_Client::POST y así sucesivamente.

Si no se especifica ningún método, se usa el método establecido por la última llamada a setMethod(). Si setMethod() nunca fue llamado, el método de petición por defecto es GET (vea el ejemplo anterior).

Ejemplo 38.3. Usar métodos de petición distintos de GET

// Preforming a POST request
$response = $client->request('POST');

// Yet another way of preforming a POST request
$client->setMethod(Zend_Http_Client::POST);
$response = $client->request();


38.1.4. Añadir parámetros GET y POST

Añadir parámetros GET a una petición HTTP es bastante sencillo, y puede hacerse especificándolos como parte de la URL, o usando el método setParameterGet(). Este método toma el nombre del parámetro GET como su primer parámetro, y el valor del parámetro GET como su segundo parámetro. Por comodidad, el método setParameterGet() también puede aceptar un único array asociativo de variables GET nombre => valor, lo cual puede resultar más cómodo cuando es necesario establecer varios parámetros GET.

Ejemplo 38.4. Establecer parámetros GET

// Setting a get parameter using the setParameterGet method
$client->setParameterGet('knight', 'lancelot');

// This is equivalent to setting such URL:
$client->setUri('http://example.com/index.php?knight=lancelot');

// Adding several parameters with one call
$client->setParameterGet(array(
    'first_name'  => 'Bender',
    'middle_name' => 'Bending'
    'made_in'     => 'Mexico',
));


Aunque los parámetros GET pueden enviarse con cualquier método de petición, los parámetros POST solo se envían en el cuerpo de las peticiones POST. Añadir parámetros POST a una petición es muy similar a añadir parámetros GET, y puede hacerse con el método setParameterPost(), que es similar en estructura al método setParameterGet().

Ejemplo 38.5. Establecer parámetros POST

// Setting a POST parameter
$client->setParameterPost('language', 'fr');

// Setting several POST parameters, one of them with several values
$client->setParameterPost(array(
    'language'  => 'es',
    'country'   => 'ar',
    'selection' => array(45, 32, 80)
));


Note que al enviar peticiones POST, puede establecer tanto parámetros GET como POST. Por otro lado, aunque establecer parámetros POST para una petición que no sea POST no provocará un error, es inútil. A menos que la petición sea una petición POST, los parámetros POST simplemente se ignoran.

38.1.5. Acceder a la última petición y respuesta

Zend_Http_Client proporciona métodos para acceder a la última petición enviada y a la última respuesta recibida por el objeto cliente. Zend_Http_Client->getLastRequest() no toma parámetros y devuelve la última petición HTTP enviada por el cliente como una cadena. De manera similar, Zend_Http_Client->getLastResponse() devuelve la última respuesta HTTP recibida por el cliente como un objeto Zend_Http_Response.