【发布时间】:2014-08-15 15:35:33
【问题描述】:
我在 PHP 中通过 cURL 调用 WordPress XML-RPC 时遇到了一些问题。这是一个 WordPress.com 托管的博客,XML-RPC 文件位于http://sunseekerblogbook.com/xmlrpc.php。
从昨天开始(或者至少是昨天发现的),cURL 一直失败并出现错误 #52:来自服务器的空回复。
我们使用的代码 sn-p 如下:
$ch = curl_init('http://sunseekerblogbook.com/xmlrpc.php');
curl_setopt_array($ch, [
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => [
'Content-Type: text/xml'
],
CURLOPT_POSTFIELDS => xmlrpc_encode_request('wp.getPosts', [
1,
WP_USERNAME,
WP_PASSWORD,
[
'number' => 15
]
]),
CURLOPT_RETURNTRANSFER => true
]);
$ret = curl_exec($ch);
$data = xmlrpc_decode($ret, 'UTF-8');
然而,直接使用 cURL,一切都按预期返回:
$output = [];
exec('curl -d "<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>wp.getPosts</methodName><params><param><value><int>1</int></value></param><param><value><string>' . WP_USERNAME . '</string></value></param><param><value><string>' . WP_PASSWORD . '</string></value></param><param><value><struct><member><name>number</name><value><int>15</int></value></member></struct></value></param></params></methodCall>" sunseekerblogbook.com/xmlrpc.php', $output);
$data = xmlrpc_decode(implode('', $output), 'UTF-8');
自 2013 年 7 月以来,我们已经能够成功地查询 WordPress,但对于为什么会发生这种情况,我们陷入了死胡同。看起来 PHP 或 cURL 最近在服务器上没有更新/更改,但第一个代码 sn-p 在我们现在尝试过的每台服务器上都失败了(使用 PHP 5.4+)。
使用http://sunseekerblogbook.wordpress.com/xmlrpc.php 链接会出现同样的问题。
PHP 代码中是否缺少任何会导致此问题的内容?它突然停止工作超过 12 个月,这让我很困惑。
【问题讨论】:
-
您是否已经转储了
xmlrpc_encode_request()调用的输出以查看它是否与手动构建的 XMLRPC 匹配? -
@BA_Webimax 感谢您的评论。我有——事实上,这就是我为手动 cURL 请求构建 XML 的方式。它返回错误 #52 的事实意味着 WordPress 已经完全决定忽略我的连接!我认为可能是网络问题,但它在几个完全未连接的不同服务器上出现故障,这似乎不太可能。
标签: php wordpress curl xml-rpc