Chapitre 6. Zend_Http
Précédent |  | Suivant

## Chapitre 6. Zend_Http

## 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
`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
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
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
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()` .

Précédent |  | Suivant
5.2. Zend_Filter_Input | Sommaire | 6.2. Zend_Http_Response