Посылка запросов XML-RPC

Задача
Вы хотите быть XML-RPC-клиентом и посылать запросы на сервер. XML-RPC позволяет PHP осуществлять вызовы функций на веб-сервере, даже если они не используют PHP. Затем полученные данные автоматически конвертируются в переменные PHP для использования
в вашем приложении.

Решение
Используйте встроенное в PHP расширение XML-RPC с некоторыми вспомогательными функциями. Что касается версии PHP 4.1, то она поставляется с расширением xmlrpc-epi. К сожалению, расширение xmlrpc-epi не имеет «родных» C-функций, принимающих форматированную строку XML-RPC и посылающих запрос. Однако в более позднее семейство xmlrpc-epi включен набор вспомогательных функций, написанных на PHP и доступных для загрузки с адреса http://xmlrpcepi.sourceforge.net/. Единственным используемым в данном случае файлом является файл utils.php, который располагается в каталоге sample/utils. Для инсталляции этого файла просто скопируйте его в каталог, входящий в include_path, чтобы PHP смог найти этот файл.

Ниже приведен код клиентской программы, вызывающий функцию на сервере XML-RPC, который возвращает названия штатов:

// это имя файла по умолчанию из пакета, хранящееся
// здесь, чтобы избежать путаницы в имени файла
require 'utils.php';
// параметры сервера
$host = 'betty.userland.com';
$port = 80;
$uri = '/RPC2';
// параметры запроса:
// передаем число из диапазона 1-50.
// в ответ получаем n-й штат в алфавитном порядке,
// где 1 это Alabama, 50 это Wyoming и т.п.
$method = 'examples.getStateName';
$args = array(32); // передаваемые данные
// строим из этих переменных массив
$request = compact('host', 'port', 'uri', 'method', 'args');
// эта функция создает соответствующий XML-RPC запрос$result = xu_rpc_http_concise($request);
print "I love $result!\n";

Обсуждение
XML-RPC – формат, созданный фирмой Userland Software, позволяет посылать запросы веб-серверу с помощью протокола HTTP.


Сам запрос представляет собой XML-документ, отформатированный особым образом. В качестве клиента вы строите посылаемый XML-запрос, который должен удовлетворять спецификации XML-RPC. Затем вы посылаете
его на сервер, а сервер отвечает вам XML-документом. Для извлечения результатов необходимо проанализировать полученный XML-документ. Сервер XML-RPC в разделе «Решение» возвращает название штата, поэтому программа печатает:

I love New York!

В отличие от более ранних реализаций XML-RPC, которые были запрограммированы на PHP, текущая версия встроенного расширения написана на C, и обработка с ее помощью выполняется значительно быстрее. Чтобы подключить это расширение, добавьте при конфигурировании PHP параметр --with-xmlrpc.

Параметры сервера указывают PHP, какому серверу посылать запрос. Переменная $host – это имя хоста сервера; переменная $port обозначает порт, через который работает веб-сервер, обычно это порт с номером 80; переменная $uri – это относительный путь к серверу XML-RPC, с которым нужно соединиться. Этот запрос эквивалентен запросу http://
betty.userland.com:80/RPC2. Если порт не указан, функция по умолчанию обращается к порту 80, а в качестве URI по умолчанию берется корневой каталог веб-сервера /.
Параметрами запроса являются имя вызываемой функции и данные, которые ей передаются.


Так, метод examples.getStateName принимает целое число из диапазона от 1 до 50 и возвращает соответствующее название американского штата в алфавитном порядке. В XML-RPC имена методов могут включать точку, а в PHP нет. Если бы это было так, то PHP-эквивалентом передачи числа 32 в качестве аргумента при вызове метода XML-RPC examples.getStateName был бы вызов функции examples.getStateName():

examples.getStateName(32);

В XML-RPC это выглядит следующим образом:



examples.getStateName



32





Параметры сервера и информация запроса заносятся в единый ассоциативный массив, который передается функции xu_rpc_http_concise().

Для сокращения записи выполняется вызов функции compact(), который идентичен следующему:

$request = array('host' => $host,
'port' => $port,
'uri' => $uri,
'method' => $method,
'args' => $args);

Функция xu_rpc_http_concise() выполняет вызов XML-RPC и возвращает результаты.


Поскольку возвращенное значение является строкой, можно непосредственно вывести переменную $results. Если же наш XML-RPC-вызов возвращает множество значений, то функция xu_rpc_http_concise() также возвращает массив.

В массиве, передаваемом функции xu_rpc_http_concise(), может быть до 10 различных параметров, но только один из них обязателен – host.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Анализ XML с помощью DOM
Анализ XML с помощью SAX
Генерация XML вручную
Генерация XML с применением DOM
Обмен данными с помощью WDDX

Вернуться в раздел: PHP / 12. XML