【问题标题】:XML-RPC failing to respond to POST requests via cURL in PHPXML-RPC 无法通过 PHP 中的 cURL 响应 POST 请求
【发布时间】: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


【解决方案1】:

设法修复它。查看 cURL 发送的标头,唯一的区别是 cURL 命令行使用 Content-Type: application/x-www-form-urlencoded,而用户代理设置为 User-Agent: curl/7.30.0

内容类型的选择不影响它,但设置用户代理对其进行排序!似乎 WordPress.com(但不是运行最新 v3.9.2 的自托管 WordPress.org 站点)现在需要一个用于 XML-RPC 请求的用户代理,尽管在我能找到的任何地方都没有记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2012-07-29
    • 2015-11-03
    • 1970-01-01
    • 2021-12-24
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多