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

## Глава 13. Zend_Http

## 13.1. Zend_Http_Client - Введение

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

Zend_Http_Client предоставляет простой интерфейс для выполнения HTTP-запросов. Zend_Http_Client поддерживает как большинство простых возможностей, ожидаемых от любого HTTP-клиента, так и более сложные функции, такие, как HTTP-аутентификация и выгрузка файлов. При успешно выполненных запросах (и большинстве неуспешно выполненных) возвращается объект Zend_Http_Response, который предоставляет доступ к заголовкам и телу ответа (см. Раздел 13.5, «Zend_Http_Response»).

Конструктор класса опционально принимает URL (может быть строкой или объектом Zend_Uri_Http) и массив конфирурационных параметров. Оба параметра могут быть опущены и установлены позднее через методы `setUri()` и `setConfig()`.

Пример 13.1. Инстанцирование объекта Zend_Http_Client

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

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

        // Этот код делает то же самое:
        $client = new Zend_Http_Client();
        $client->setUri('http://example.org');
        $client->setConfig(array(
            'maxredirects' => 0,
            'timeout'      => 30));

    ?>

### 13.1.2. Параметры конфигурации

Конструктор и метод `setConfig()` принимают ассоциативный массив параметров конфигурации. Установка этих параметров является опциональной, поскольку все они имеют значения по умолчанию.

Таблица 13.1. Параметры конфигурации Zend_Http_Client

Параметр | Описание | Тип | Значение по умолчанию
--- | --- | --- | ---
maxredirects | Максимальное количество последующих перенаправлений (0 = ни одного перенаправления) | integer | 5
strictredirects | Строгое следование спецификации RFC при перенаправлениях (см. Раздел 13.2.1, «HTTP Redirections») | boolean | false
useragent | Идентификатор агента пользователя (отправляется в заголовке запроса) | string | 'Zend_Http_Client'
timeout | Таймаут соединения в секундах | integer | 10
httpversion | Версия протокола HTTP | float (1.1 or 1.0) | 1.1
adapter | Используемый класс адаптера соединения (см. Раздел 13.3, «Zend_Http_Client - Connection Adapters») | mixed | 'Zend_Http_Client_Adapter_Socket'
keepalive | Включение поддержки соединения keep-alive с сервером. Может быть полезно и повышает поизводительность, если выполняется несколько последовательных запросов к одному и тому же серверу. | boolean | false

### 13.1.3. Выполнение базовых HTTP-запросов

Выполнение простых HTTP-запросов с использованием метода `request()` довольно простое, и редко требуется больше кода, чем в эти три строчки:

Пример 13.2. Выполнение простого запроса GET

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

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

Метод `request()` принимает один необязательный параметр - метод запроса. Это могут быть методы GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS или CONNECT, определенные в протоколе HTTP. [1]. Для удобства все они определены как константы класса: Zend_Http_Request::GET, Zend_Http_Request::POST и т.д.

Если метод запроса не был указан, то используемый метод определяется последним вызовом `setMethod()`. Если `setMethod()` не был вызван, то по умолчанию используется метод GET (см. пример выше).

Пример 13.3. Использование методов запроса, отличных от GET

    <?php
        // Выполнение запроса POST
        $response = $client->request('POST');

        // Еще один способ сделать то же самое:
        $client->setMethod(Zend_Http_Client::POST);
        $response = $client->request();
    ?>

### 13.1.4. Добавление параметров GET и POST

Добавление параметров GET в HTTP-запрос довольно простое, это может быть сделано посредством определения параметров как часть URL или с использованием метода `setParameterGet()`. Этот метод принимает имя параметра GET и его значение первый и второй аргументы соответственно. Метод `setParameterGet()` может также принимать ассоциативный массив пар имя => значение, что удобно, если нужно установить несколько параметров GET.

Пример 13.4. Установка параметров GET

    <?php
        // Установка параметра GET с использованием метода setParameterGet
        $client->setParameterGet('knight', 'lancelot');

        // Эвивалентный код с установкой через URL:
        $client->setUri('http://example.com/index.php?knight=lancelot');

        // Добавление нескольких параметров в одном вызове
        $client->setParameterGet(array(
            'first_name'  => 'Bender',
            'middle_name' => 'Bending'
            'made_in'     => 'Mexico',
        ));
    ?>

В то время как параметры GET могут отправляться с любыми методами запроса, параметры POST могут отправляться только в теле запроса POST. Добавление параметров POST к запросу очень похоже на добавление параметров GET и выполняется через метод `setParameterPost()`.

Пример 13.5. Установка параметров POST

    <?php
        // Установка параметра POST
        $client->setParameterPost('language', 'fr');

        // Установка нескольких параметров POST,
        // один из них - с несколькими значениями
        $client->setParameterPost(array(
            'language'  => 'es',
            'country'   => 'ar',
            'selection' => array(45, 32, 80)
        ));
    ?>

Заметьте, что отправляя запрос POST, вы можете установить как параметры POST, так и параметры GET. С другой стороны, хотя установка параметров POST для не-POST запросов не вызывает ошибки, она не имеет практического смысла. Если запрос не производится по методу POST, то параметры POST просто игнорируются.

[1] См. RFC 2616 - http://www.w3.org/Protocols/rfc2616/rfc2616.html.

Пред. |  | След.
12.9. Catching Gdata Exceptions | Начало | 13.2. Zend_Http_Client - Advanced Usage