Глава 9. Zend_Http
Пред. |  | След.

## Глава 9. Zend_Http

## 9.1. Zend_Http_Client

### 9.1.1. Введение

`Zend_Http_Client` предоставляет простой интерфейс для произведения запросов HTTP. `Zend_Http_Client` может производить запросы GET, POST, PUT и DELETE.

| Замечание
По умолчанию `Zend_Http_Client` реализует до 5-ти переадресаций HTTP. Для того, чтобы изменить это поведение, передавайте максимальное допустимое количество переадресаций методу `get()`.

Пример 9.1. Выполнение базовых запросов GET

    <?php
        require_once 'Zend/Http/Client.php';
        try {
            $http = new Zend_Http_Client('http://example.org');
            $response = $http->get();
            if ($response->isSuccessful()) {
                echo $response->getBody();
            } else {
                echo '<p>Произошла ошибка</p>';
            }
        } catch (Zend_Http_Client_Exception $e) {
            echo '<p>Произошла ошибка (' .$e->getMessage(). ')</p>';
        }
        ?>

### 9.1.2. Базовые запросы GET с установленными заголовками HTTP

Конструктор `Zend_Http_Client` создает экземпляр `Zend_Http_Client` для отправки запросов HTTP.

Если используете `Zend_Http_Client` для одного URL, то в большинстве случаев можете передавать URL и соответствующие заголовки конструктору, как в следующих примерах:

Пример 9.2. Создание основного Zend_Http_Client

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

        // Определение URL и одного заголовка
        $http = new Zend_Http_Client('http://example.org', 'Accept: text/html');
        ?>

Пример 9.3. Передача нескольких заголовков

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

        // Установка URL и нескольких заголовков
        $http = new Zend_Http_Client('http://example.org',
                                array('Accept: text/html', 'Accept-Language: en-us,en;q=0.5'));
        ?>

Если вы хотите использовать `Zend_Http_Client` для отправки запросов больше, чем по одному URL-у, то см. Раздел 9.1.3, « Отправка запросов нескольким доменам ».

### 9.1.3. Отправка запросов нескольким доменам

`Zend_Http_Client` поддерживает отправку запросов нескольким доменам посредством установки URL для запроса методом `Zend_Http_Client::setUri()`.

| Замечание
Это очень полезно, когда делаются запросы к нескольким лентам RSS.

Пример 9.4. Отправка запросов нескольким доменам

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

        // Создание объекта клиента
        $http = new Zend_Http_Client();

        // Установка URI к основной ленте Slashdot
        $http->setUri('http://rss.slashdot.org/Slashdot/slashdot');

        // Извлечение ленты
        $slashdot = $http->get();

        // Теперь получаем ленту новостей BBC
        $http->setUri('http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml');

        // Извлечение ленты
        $bbc = $http->get();
        ?>

### 9.1.4. Изменение таймаута HTTP

`Zend_Http_Client::setTimeout()` позволяет установить таймаут соединения HTTP в секундах.

| Замечание
Таймаут по умолчанию составляет 10 секунд.

### 9.1.5. Динамическая установка заголовков HTTP

Используя `Zend_Http_Client::setHeaders()`, вы можете добавлять массив заголовков.

| Важно
Заголовки должны следовать следующему формату: ``Заголовок: значение``

### 9.1.6. Выполнение HTTP-запросов POST, PUT и DELETE

В `Zend_Http_Client` выполнение HTTP-запросов POST, PUT и DELETE облегчено тремя методами: `post()`, `put()` и `delete()`, соответственно. Методы `post()` и `put()` принимают единственный параметр `$data`, в котором должна быть строка с должным образом закодированными данными, как в следующем примере: `name=value&foo=bar`. Метод `delete()` не имеет параметров.

Пример 9.5. Отправка данных POST с помощью Zend_Http_Client

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

        // Создание объекта клиента
        $http = new Zend_Http_Client();

        // Установка URI к обработчику данных POST
        $http->setUri('http://example.org/post/processor');

        // Сохранение специальных переменных GET как данные HTTP POST
        $postData = 'foo=' . urlencode($_GET['foo']) . '&bar=' . urlencode($_GET['bar']);

        // Выполнение запроса HTTP POST и сохранение ответа HTTP
        $httpResponse = $http->post($postData);
        ?>

Выполнение запроса PUT точно такое же, как в примере выше для выполнения запросов POST - просто замените метод `put()` на `post()`.

Пред. |  | След.
8.2. Zend_Filter_Input | Начало | 9.2. Zend_Http_Response