Programmer's Reference Guide

Chapitre 17. Zend_Http

17.1. Zend_Http_Client - Introduction

17.1.1. Introduction

Zend_Http_Client fournit une interface qui permet d'utiliser le protocole HTTP (Hyper-Text Transfer Protocol). Zend_Http_Client supporte les fonctionnalités de base d'un client HTTP, ainsi que des fonctionnalités plus avancées, comme l'authentification ou l'upload de fichiers. Toutes les requêtes retournent un objet Zend_Http_Response, avec lequel on pourra accéder au corps ou aux en-têtes de la réponse HTTP (voyez Section 17.5, « Zend_Http_Response »).

Le constructeur de classe accepte deux paramètres : l'URI (ou un objet Zend_Uri_Http), et un tableau de configuration. Ils peuvent aussi être définis avec des méthodes plus tard : setUri() et setConfig().

Exemple 17.1. Instanciation d'un objet Zend_Http_Client


<?php
require_once 'Zend/Http/Client.php';

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

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


17.1.2. Les paramètres de configuration

Le constructeur et setConfig() acceptent un tableau associatif de paramètre de configuration. Fixer ces paramètres est optionnel, ils ont tous une valeur par défaut.

Tableau 17.1. Zend_Http_Client : paramètres de configuration

Paramètre Description Valeur attendue Valeur par défaut
maxredirects Nombre maximum de redirections à suivre (0 = aucune) entier 5
strict Si à false, des fonctions de validation n'interviendront pas booléen true
strictredirects Est ce que le client doit suivre strictement les redirections selon la RFC2616 ? (voyez Section 17.2.1, « Redirections HTTP ») booléen false
useragent La chaine User Agent du client (envoyée en en-tête de requête) chaine 'Zend_Http_Client'
timeout Connexion timeout (secondes) entier 10
httpversion Version du protocole HTTP à utiliser ('1.1', '1.0' ou '0.9') chaine '1.1'
adapter Classe adaptateur à utiliser (voyez Section 17.3, « Zend_Http_Client - Adaptateurs de connexion ») mixed 'Zend_Http_Client_Adapter_Socket'
keepalive Utilisation du pipelining HTTP (connexion ouverte après déconnexion du client) booléen false


17.1.3. Utilisation basique

Executer des requêtes HTTP basiques est très simple grâce à la méthode request(), et ceci nécessite rarement plus d'une ligne de code :

Exemple 17.2. Requête GET simple


<?php
require_once 'Zend/Http/Client.php';

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


La méthode request() accepte un paramètre optionnel définissant la méthode HTTP, - GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS ou CONNECT - comme définies dans la RFC 2616 concernant le protocole HTTP [1]. Ces méthodes HTTP sont aussi définies en tant que constantes de classe, Zend_Http_Request::GET, Zend_Http_Request::POST, etc...

Si aucune méthode de requêtage HTTP n'est définie, alors la dernière utilisée via setMethod() sera utilisée. Si setMethod() n'a jamais été appelée, GET est alors utilisée par défaut.

Exemple 17.3. Requêtes d'autres types que GET


<?php
// requête POST
$response $client->request('POST');

// autre manière de faire :
$client->setMethod(Zend_Http_Client::POST);
$response $client->request();


17.1.4. Ajouts de paramètres GET et POST

Ajouter des paramètres GET à la requête HTTP est très simple. Vous pouvez les ajouter en tant que partie de l'URL désirée, ou en utilisant la méthode setParameterGet(). Celle-ci prend en premier paramètre le nom du paramètre GET, et en second sa valeur. Un tableau associatif peut aussi être utilisé.

Exemple 17.4. Ajouts de paramètres GET


<?php
// Avec la méthode setParameterGet
$client->setParameterGet('knight''lancelot');

// Ce qui est équivalent à :
$client->setUri('http://example.com/index.php?knight=lancelot');

// Ajout de plusieurs paramètres en un appel
$client->setParameterGet(array(
    
'first_name'  => 'Bender',
    
'middle_name' => 'Bending'
    'made_in'     
=> 'Mexico',
));


Coté POST, c'est très similaire à GET, sauf que les paramètres POST doivent faire partie du corps de la requête. Il n'est donc pas possible de les ajouter dans l'URL. Utilisez simplement setParameterPost() de la même manière que sa soeur setParameterGet().

Exemple 17.5. Ajout de paramètres POST


<?php
// passage de paramètre POST simple
$client->setParameterPost('language''fr');

// Plusieurs paramètres, dont un avec plusieurs valeurs
$client->setParameterPost(array(
    
'language'  => 'es',
    
'country'   => 'ar',
    
'selection' => array(453280)
));


Notez qu'en plus de paramètres POST, vous pouvez ajouter des paramètres GET à une requête POST. Le contraire n'est pas possible, ainsi les paramètres POST ajoutés à une requête GET seront acceptés certes, mais ignorés.

17.1.5. Accéder à la derniere requête, ou réponse

Zend_Http_Client fournit un moyen d'accéder à la dernière requête qu'il a efféctuée, ainsi qu'à la dernière réponse qu'il a reçue. Zend_Http_Client->getLastRequest() ne prends pas de paramètres et retourne la dernière requête sous forme de chaine de caractères. Zend_Http_Client->getLastResponse() retourne elle la dernière réponse, mais sous forme d'objet Zend_Http_Response.