Вызов удаленной процедуры 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.

После отправки сообщения серверная сторона принимает запрос и выполняет указанную процедуру. После этого формируется новое сообщения (ответ), которое так же состоит из двух блоков, но содержит уже другие данные, так например блок 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. После кодирования эти данные не будут передаваться в открытом виде.

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

Похожие темы

Cоздание файла App.Config c элементом connectionSt... Cоздание файла App.Config c элементом connectionStrings Продолжаем работать с приложением, созданным в предыдущей статье. Сегодня повысим гибкость, и...
Получение данных из базы данных Mysql с помощью ме... Mysql метод ExecuteReader В этой статье хочу показать на простом примере, как можно получить данные из базы данных Mysql с помощью метода ExecuteRead...
Работа с СУБД MySQL в C# Работа с базой данных MySQL в C# Рассмотрим простенькую задачку. У нас есть сайт, управление, которым осуществляется с помощью cms WordPress, а все д...
c# Шпаргалка для работы с папками и подпапками... c# Шпаргалка для работы с папками и подпапками Перед началом работы подключите пространство имён System.IO Это можно выполнить как вручную, добави...
Установка MySQL for Visual Studio Как установить MySQL for Visual Studio? MySQL for Visual Studio это продукт от компании Microsoft, который предоставляет дополнительные инструменты д...