Содержание
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>';
}
?>
Конструктор 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, «
Отправка запросов нескольким доменам
».
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();
?>
Zend_Http_Client::setTimeout() позволяет установить таймаут
соединения HTTP в секундах.
![]() |
Замечание |
|---|---|
Таймаут по умолчанию составляет 10 секунд. |
Используя Zend_Http_Client::setHeaders(), вы можете добавлять
массив заголовков.
![]() |
Важно |
|---|---|
Заголовки должны следовать следующему формату:
|
В 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().