#php #wordpress #http-post #xml-rpc #httpie
#php #wordpress #http-сообщение #xml-rpc #httpie
Вопрос:
Я использую HTTPie для выполнения POST
запроса к моей локальной установке WordPress с целью проверки, доступен ли XML-RPC и включен ли он.
http --verify=no POST https://crmpicco.localhost/xmlrpc.php data="<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>admin</value></param><param><value>pass</value></param></params></methodCall>"
Это возвращает 200
, однако в ответе указан код ошибки:
HTTP/1.1 200 OK
Connection: close
Content-Length: 403
Content-Type: text/xml; charset=UTF-8
Date: Fri, 08 Mar 2019 03:18:43 GMT
Server: Apache/2.4.35 (Unix) OpenSSL/1.0.2p PHP/7.2.11
X-Powered-By: PHP/7.2.11
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>-32700</int></value>
</member>
<member>
<name>faultString</name>
<value><string>parse error. not well formed</string></value>
</member>
</struct>
</value>
</fault>
</methodResponse>
Другие с этой проблемой указывают на то, что php-xml
расширение недоступно, однако, когда я делаю php -m | grep -i xml
, оно отображается как установленное:
libxml
SimpleXML
xml
xmlreader
xmlrpc
xmlwriter
Чего мне не хватает?
Ответ №1:
Для этого мне пришлось вернуться к использованию cURL. Я не уверен, что именно я делал неправильно с HTTPie или есть ли у него ограничение в этом отношении, однако он работал с cURL с:
curl -k -d '<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value>user</value></param><param><value>pass</value></param></params></methodCall>' https://crmpicco.localhost/xmlrpc.php
Ответ №2:
У меня такая же проблема, вызов wordpress API работает с phpxmlrpc-4.0.0, но с некоторыми предупреждениями об устаревших функциях, поэтому я обновился до phpxmlrpc-4.4.1, затем получил эту «ошибку синтаксического анализа». неправильно сформированная «ошибка
ОБНОВЛЕНИЕ: я только что нашел обходной путь для этого: в файле «lib / xmlrpc.inc» измените настройку кодировки:
От:
PhpXmlRpcPhpXmlRpc::$xmlrpc_internalencoding = 'ISO-8859-1';
Для:
PhpXmlRpcPhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
Другой узел заключается в том, что: seting
$xml_rpc_client-> request_charset_encoding=»UTF-8″
просто перепутывает мой текстовый контент
Комментарии:
1. Вам не нужно изменять код в самой библиотеке phpxmlrpc. Вы можете установить
PhpXmlRpcPhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
в любом месте кода вашего собственного приложения