Вопрос или проблема
Я использую WP 4.7.4. Сайт является стандартным, без активированных плагинов, кроме стандартных. Я использую WordPress::XMLRPC
Perl модуль для генерации XMLRPC вызова getPost
для поста #1 следующим образом:
my $obj = WordPress::XMLRPC->new({username => 'admin', password => 'xxxxxx', proxy => 'http://my.domain.com/'});
my $post = $obj->getPost(1);
Полная ошибка выглядит так:
некорректно составлено (неверный токен) на строке 15, столбце 51, байт 720 в /usr/local/lib/x86_64-linux-gnu/perl/5.20.2/XML/Parser.pm строка 187.
<!DOCTYPE html>
<html lang=”en-US” class=”no-js”>
<head>
<…snip…>
</body>
</html>
в /usr/local/share/perl/5.20.2/WordPress/XMLRPC.pm строка 643.
Вот строка 643 из WordPress::XMLRPC
:
my $call = $self->server->call(
'metaWeblog.getPost',
$post_id,
$user_login,
$user_pass,
);
Вот строка 187 из XML::Parser
в операторе eval
:
eval {
$result = $expat->parse($arg);
};
Строка 15 из вывода выглядит так:
https://fonts.gstatic.com’ crossorigin rel=”preconnect” />
Когда я пропустил этот вывод через XML валидатор, я тоже получил ошибку:
Эта страница содержит следующие ошибки:
ошибка на строке 15 в столбце 52: Спецификация требует указать значение для атрибута crossorigin
Черт, я забыл прикрепить /xmlrpc.php
к URL. Это должно было быть очевидно, потому что он возвращал домашнюю страницу.
Ответ или решение
Ваша проблема возникает из-за того, что вы не указали правильный URL для вашего XML-RPC вызова. Вместо того чтобы указывать корневой URL вашего сайта, вам необходимо добавлять /xmlrpc.php
в конце. Когда вы выполняете вызов к корневой странице сайта, сервер возвращает HTML-код домашней страницы, а не ожидаемый XML-ответ, что и приводит к ошибке парсинга.
Вот как вы можете исправить этот код:
my $obj = WordPress::XMLRPC->new({username => 'admin', password => 'xxxxxx', proxy => 'http://my.domain.com/xmlrpc.php'});
После внесения этого изменения ваш вызов getPost
будет осуществляться корректно, и сервер вернёт нужный XML-ответ для вызова metaWeblog.getPost
.
Также обратите внимание на следующее:
- Убедитесь, что ваш сервер позволяет XML-RPC вызовы. В некоторых случаях, особенно при использовании плагинов безопасности, эти вызовы могут быть отключены.
- Проверьте, что ваши сетевые настройки, включая прокси (если он используется), корректно настроены и позволяют доступ к
xmlrpc.php
. - Если проблема продолжает возникать, попробуйте временно отключить все плагины и переключить тему на стандартную для того, чтобы исключить возможность конфликтов.
Если вы выполните эти шаги, ваша программа должна начать корректно работать с WordPress XML-RPC API.