Глава 8. Zend_Http

Содержание

8.1. Zend_Http_Client
8.1.1. Введение
8.1.2. Базовые запросы GET с установленными заголовками HTTP
8.1.3. Отправка запросов нескольким доменам
8.1.4. Изменение таймаута HTTP
8.1.5. Динамическая установка заголовков HTTP
8.1.6. Выполнение HTTP-запросов POST, PUT и DELETE
8.2. Zend_Http_Response
8.2.1. Введение

8.1. Zend_Http_Client

8.1.1. Введение

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

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

Пример 8.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>';
    }
    ?>

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

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

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

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

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

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

Пример 8.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-у, то см. Раздел 8.1.3, « Отправка запросов нескольким доменам ».

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

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

[Замечание] Замечание

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

Пример 8.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();
    ?>   

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

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

[Замечание] Замечание

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

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

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

[Важно] Важно

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

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

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

Пример 8.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().