неправильный токен (недопустимый токен) на строке 15, столбце 51, байт 720 при попытке разобрать вызов XMLRPC

Вопрос или проблема

Я использую 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.

Также обратите внимание на следующее:

  1. Убедитесь, что ваш сервер позволяет XML-RPC вызовы. В некоторых случаях, особенно при использовании плагинов безопасности, эти вызовы могут быть отключены.
  2. Проверьте, что ваши сетевые настройки, включая прокси (если он используется), корректно настроены и позволяют доступ к xmlrpc.php.
  3. Если проблема продолжает возникать, попробуйте временно отключить все плагины и переключить тему на стандартную для того, чтобы исключить возможность конфликтов.

Если вы выполните эти шаги, ваша программа должна начать корректно работать с WordPress XML-RPC API.

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

Капча загружается...