Как работать с XML-RPC на PHP. Простой пример.
Недавно мне понадобилось разобраться в том, как работать с XML-RPC на PHP, однако, оказалось, что внятную документацию на эту тему найти не так просто. После некоторого времени поисков, мне удалось-таки наскрести информации, достаточной для рабочего примера. Теперь хочу поделиться, надеюсь, кому-нибудь пригодится.
Ниже располагается код скриптов серверной и клиентской частей. Клиентская часть отправляет серверной данные, серверная часть сериализует эти данные и возвращает назад клиентской. Клиентская десериализует и выводит на экран. Фактически, получается своеобразное эхо, то есть, что отправил – то и получил назад. Сделано это просто для теста.
Рассмотрим код подробнее.
Скрипт-сервер:
<?php
/*
Функция-обработчик получаемых данных. $method_name – имя вызываемого метода, $params - параметры, $user_data – пользовательские данные. Подробнее – в документации к PHP.
*/
function local($method_name, $params, $user_data)
{
/*возвращаем сериализованные входящие данные*/
return serialize($params);
}
/*создаем сервер*/
$s = xmlrpc_server_create();
/*регистрируем метод-обработчик*/
xmlrpc_server_register_method($s, 'external', 'local');
/*вызываем обработчик, передаем ему входящие данные, если обработчик возвращает что-то – выводим это на экран*/
if ($data = xmlrpc_server_call_method($s, $HTTP_RAW_POST_DATA, null))
echo $data;
/*уничтожаем сервер*/
xmlrpc_server_destroy($s);
?>
/*
Функция-обработчик получаемых данных. $method_name – имя вызываемого метода, $params - параметры, $user_data – пользовательские данные. Подробнее – в документации к PHP.
*/
function local($method_name, $params, $user_data)
{
/*возвращаем сериализованные входящие данные*/
return serialize($params);
}
/*создаем сервер*/
$s = xmlrpc_server_create();
/*регистрируем метод-обработчик*/
xmlrpc_server_register_method($s, 'external', 'local');
/*вызываем обработчик, передаем ему входящие данные, если обработчик возвращает что-то – выводим это на экран*/
if ($data = xmlrpc_server_call_method($s, $HTTP_RAW_POST_DATA, null))
echo $data;
/*уничтожаем сервер*/
xmlrpc_server_destroy($s);
?>
Скрипт-клиент:
<?php
/*кодируем данные и имя метода для передачи серверу*/
$request = xmlrpc_encode_request('external', array(1, 2, 3));
/*создаем контекст для передачи данных серверу*/
$context = stream_context_create(array('http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request
)));
/*передаем запрос серверу и получаем ответ*/
$file = file_get_contents("http://адрес_сайта/скрипт_сервер.php", false, $context);
/*декодируем ответ*/
$response = xmlrpc_decode($file);
/*если ошибка – выводим ее, иначе – выводим ответ сервера*/
if (xmlrpc_is_fault($response)) {
trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
} else {
print_r(unserialize($response));
}
?>
/*кодируем данные и имя метода для передачи серверу*/
$request = xmlrpc_encode_request('external', array(1, 2, 3));
/*создаем контекст для передачи данных серверу*/
$context = stream_context_create(array('http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request
)));
/*передаем запрос серверу и получаем ответ*/
$file = file_get_contents("http://адрес_сайта/скрипт_сервер.php", false, $context);
/*декодируем ответ*/
$response = xmlrpc_decode($file);
/*если ошибка – выводим ее, иначе – выводим ответ сервера*/
if (xmlrpc_is_fault($response)) {
trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
} else {
print_r(unserialize($response));
}
?>
Подробнее о параметрах для функций работы с XML-RPC можно узнать в документации к PHP.
Надеюсь, этот пример поможет вам понять принцип работы XML-RPC.
Статьи с похожими тегами ↓
Работа в Киеве, работа в Москве: менеджер, программист, юрист. Горячие вакансии. — Безработных.Нет
Салаты, дессерты, торты, рыбные, мясные, блюда из овощей, птицы, рецепты блюд

Добавить комментарий