Chapitre 6. Zend_Http

Table des matières

6.1. Zend_Http_Client
6.1.1. Introduction
6.1.2. Requêtes GET de base avec en-têtes HTTP
6.1.3. Envoyer une requête à plusieurs domaines
6.1.4. Modifier le délai d'attente HTTP
6.1.5. Définir dynamiquement les en-têtes HTTP
6.1.6. Effectuer des requêtes HTTP POST, PUT et DELETE
6.2. Zend_Http_Response
6.2.1. Introduction

6.1. Zend_Http_Client

6.1.1. Introduction

Zend_Http_Client fournit une interface simple avec laquelle vous pourrez effectuer des requêtes HTTP. Zend_Http_Client est capable d'effectuer des requêtes GET, POST, PUT et DELETE.

[Note] Note
Zend_Http_Client suit par défaut jusqu'à 5 redirections HTTP. Pour changer ce comportement, passez le nombre maximum de redirections autorisées à la méthode get().

Exemple 6.1. Effectuer une requête GET de base

<?php
require_once 'Zend/HttpClient.php';
try {
    $http = new Zend_Http_Client('http://exemple.org');
    $reponse = $http->get();
    if ($reponse->isSuccessful()) {
        echo $reponse->getBody();
    } else {
        echo '<p>Une erreur a eu lieu</p>';
    }
} catch (Zend_Http_Client_Exception $e) {
    echo '<p>Un erreur a eu lieu (' .$e->getMessage(). ')</p>';
}
?>

6.1.2. Requêtes GET de base avec en-têtes HTTP

Le constructeur Zend_Http_Client crée une instance de Zend_Http_Client permettant d'envoyer des requêtes HTTP.

Lorsque vous utilisez Zend_Http_Client sur une seule URL, dans la plupart des cas vous pouvez passer l'URL et les en-têtes voulues au constructeur, comme dans les exemples suivants :

Exemple 6.2. Créer un objet Zend_Http_Client de base

            <?php
            require_once 'Zend/HttpClient.php';
            
            // Définition de l'URL et de l'en-tête
            $http = new Zend_Http_Client('http://exemple.org', 'Accept: text/html');
            ?>       
        

Exemple 6.3. Envoyer plusieurs en-têtes

        <?php
            require_once 'Zend/HttpClient.php';
            
            // Définition de l'URL et de plusieurs en-têtes
            $http = new Zend_Http_Client('http://exemple.org',
            array('Accept: text/html', 'Accept-Language: fr-fr,fr;q=0.5'));
        ?>
        

Si vous souhaitez utiliser Zend_Http_Client pour envoyer des requêtes à plusieurs URL, voyez Section 6.1.3, « Envoyer une requête à plusieurs domaines »

6.1.3. Envoyer une requête à plusieurs domaines

Zend_Http_Client prend en charge l'envoi d'une requête à plusieurs domaines; pour cela, définissez l'URL où envoyer la requête grâce à la méthode Zend_Http_Client::setUri().

[Note] Note

Ceci est très pratique pour envoyer une requête à plusieurs flux RSS.

Exemple 6.4. Envoyer une requête à plusieurs domaines

        <?php
            require_once 'Zend/HttpClient.php';
            
            // Création de l'objet client
            $http = new Zend_Http_Client();
            
            // Définition de l'URI comme étant celle du flux principal de Slashdot
            $http->setUri('http://rss.slashdot.org/Slashdot/slashdot');
            
            // Obtention du flux
            $slashdot = $http->get();
            
            // Définition du flux d'actualités de la BBC
            $http->setUri('http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml');
            
            // Obtention le flux
            $bbc = $http->get();
            ?>   
        

6.1.4. Modifier le délai d'attente HTTP

La méthode Zend_Http_Client::setTimeout() vous permet de définir le délai d'attente en secondes pour une connexion HTTP.

[Note] Note

Le délai d'attente par défaut est de 10 secondes.

6.1.5. Définir dynamiquement les en-têtes HTTP

Pour définir dynamiquement les en-têtes HTTP, utilisez la méthode Zend_Http_Client::setHeaders() en lui passant un tableau d'en-têtes.

[Important] Important

Les en-têtes doivent être écrits au format : En-tête: valeur.

6.1.6. Effectuer des requêtes HTTP POST, PUT et DELETE

L'envoi de requêtes HTTP POST, PUT et DELETE est facilité par Zend_Http_Client au moyen de trois méthodes : respectivement post(), put() et delete(). Les méthodes post() et put() acceptent chacune un seul paramètre, $donnees; ce paramètre doit contenir les données POST correctement encodées et au format suivant : nom=valeur&toto=barre. La méthode delete() n'accepte aucun paramètre.

Exemple 6.5. Envoyer des données POST au moyen de Zend_Http_Client

        <?php
            require_once 'Zend/HttpClient.php';
            
            // Instanciation de l'objet client
            $http = new Zend_Http_Client();
            
            // Définition de l'URI comme étant celle d'une application traitant des données 
            POST
            $http->setUri('http://exemple.org/post/application');
            
            // Enregistrement des variables GET spécifiques sous forme de données HTTP POST
            $donneesPOST = 'toto=' . urlencode($_GET['toto']) . '&barre=' . 
            urlencode($_GET['barre']);
            
            // Exécution de la requête HTTP POST et enregistrement de la réponse HTTP
            $reponseHTTP = $http->post($donneesPOST);
            ?>   
         

Pour effectuer une requête PUT, faites la même chose que dans l'exemple ci-dessus mais remplacez post() par put() .