Вызов удаленной процедуры WordPress с помощью протокола XML-RPC

XML-RPC это протокол вызова удаленных процедур, который использует формат XML для кодирования данных и протокол HTTP для обмена данными по сети между клиентом и сервером.

В нашем примере в качестве клиента будет выступать Windows Forms приложение, а в качестве сервера, сайт под управлением cms WordPress. Данная cms имеет набор удаленных процедур для решения различных задач. Все доступные процедуры, описание, а так же принимаемые параметры и возвращаемые значения можно найти на официальном сайте, либо по запросу XML-RPC WordPress API.

Для примера рассмотрим вызов удаленной процедуры wp.getPost, которая позволяет получить в качестве результата структуру, которая содержит все поля таблицы wp_posts. Получив результат, выведем значение одной из колонок, например post_content, которая содержит текст статьи, в окно элемента управления textBox.

Создание XML файла

Так как передаваемые данные должны быть формата XML, то для начала создадим обычный xml файл, который будет хранить: имя удаленной процедуры и значения параметров.

После строки объявления, следует корневой элемент methodCall, который содержит два элемента:

methodName – обязательный элемент, который хранит имя вызываемой удаленной процедуры.

params — необязательный элемент, который хранит значения передаваемых параметров. Должен быть создан, если процедура имеет параметры.

удаленная процедура

Как видно на картинке, удаленная процедура имеет несколько параметров, из них четыре является обязательными: int blog_id, string username, string password, int post_id, а остальные параметры Optional — необязательные.

Каждый параметр объявляется в xml файле, как элемент param, у которого обязательно нужно указать дочерний элемент value, который хранит значение параметра. Так же можно явно указать тип параметра, например: <int>, <string>,<boolean>, если тег с типом не указан, то по умолчанию значение параметра имеет тип string.

Выполнение XML-RPC запроса

XML файл создан, и теперь можно выполнить XML-RPC запрос, отправив на удаленный компьютер сообщение, которое состоит из двух блоков: header и body.

Header содержит различные http заголовки, среди которых обязательными являются: User-Agent, Host, Content-Length.

Body данные в формате XML.

Для обмена данными по сети используется протокол HTTP и метод передачи данных POST.


Наш канал в telegram канал codeby

Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде !  Подробнее ...

После отправки сообщения серверная сторона принимает запрос и выполняет указанную процедуру. После этого формируется новое сообщения (ответ), которое так же состоит из двух блоков, но содержит уже другие данные, так например блок body, теперь содержит root элемент methodResponse, который может содержать один из двух элементов: fault или params.

fault — данный элемент содержит сообщение об ошибке и представляет собой структуру, которая состоит из двух элементов: faultCode — код ошибки и faultString — строка описания ошибки.

params если ошибок нет, то в ответ мы получим возвращаемые значения (данные в формате XML), которые будут иметь такой вид:

исходный код программы

Полученный ответ имеет XML формат. Используя метод Load, класса XmlDocument, загружаем XML-документ из указанного потока в память. Затем, чтобы получить текст статьи достаточно указать в качестве индекса число 13.

возвращаемые значения

В адресе запроса, после имени сайта, обязательно указываем страницу xmlrpc.php, которая выступает обработчиком отправленного с клиента запроса.

В более ранних версиях WordPress (младше 3.5) перед отправкой запроса нужно было обязательно проверить включен ли XML-RPC протокол. Для этого нужно было перейти в меню Параметры, выбрать пункт Написание и проверить, чтобы стояла галочка рядом с пунктом «Включить протоколы публикации», как на картинке ниже.

включение протокола

Теперь этого делать не нужно, так как данный протокол по умолчанию будет включен сразу же после установки cms, а в админке этого пункта просто не будет.

Видео

И ещё одно видео дополнение, в котором рассмотрено два момента:

1. Возможность установки значений параметров напрямую из приложения. После чего не нужно будет каждый раз вручную изменять значения в самом xml файле.

2. Повышаем безопасность при передаче по сети значений параметров: логин и пароль, применяя кодирование base64. После кодирования эти данные не будут передаваться в открытом виде.

Читайте также:


Наш канал в telegram канал codeby

Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде !  Подробнее ...

Похожие темы

Как просто получить данные из DataTable... Как получить данные из DataTable в c# В одной из предыдущих статей был показан пример работы с базой данных Mysql и c#. После этого многие стали обра...
Установка и настройка сервера Apache, PHP, MySQL, ... Good things should be shared. Здесь инструкция для Windows. Если у вас Linux, то вам сюда "Установка и настройка Apache, PHP, MySQL, p...
Как создать связь между таблица в DataSet?... Создание связи между таблицами в DataSet В этой статье показано, как создать связь между двумя таблицами в объекте DataSet при работе с базой данной ...
Какая хорошая бесплатная контрольная панель для VP... Управление сервером на декстопной машине и управления точно таким же сервером на «безголовой машине», например на VPS — это, как г...
Новости софта от 24 сентября 2014 года (MySQL, MiA... MySQL Community Server (проще говоря, это и есть MySQL, бесплатная версия, которой все пользуются) обновился до версий MySQL Community Server 5.6.21...