Wordpress xmlprc 无法在 https 中工作
Wordpress xmlprc not working in https
最近,我使用 SSL 更新了我的网站,所有 URI 现在都是 "https://"。
我的站点是使用 Symfony 2 开发的,并在 Symfony 2 web/wordpress
目录中混合了 Wordpress 安装。
所有常规访问都可以。只有一个问题:
在我的 Symfony 2 中,有这样的代码片段:
private function getRecentPosts($num = 4)
{
require_once 'wordpress/wp-includes/class-IXR.php';
$user = '11111';
$pwd = '22222';
$host='https://www.rsywx.net';
$script='/wordpress/xmlrpc.php';
$port=443;
$client = new \IXR_Client($host, $script, $port);
$params = array(0, $user, $pwd, $num);
$client->query('metaWeblog.getRecentPosts', $params);
$wp = $client->getResponse();
return $wp;
}
当我的网站没有用 https 包裹时,上面的代码可以正常工作。但是现在在https下,上面的代码就不行了。如果我在 query
函数调用后转储 $client
变量,它会给出如下错误:
+error: IXR_Error {#256 ▼
+code: -32300
+message: "transport error - could not open socket"
有什么提示吗?我需要调整我的 WP 吗?
我只是完全避免使用 XMLRPC 来解决这个问题。
在我的 Symfony 2 应用程序中,我只使用了第二个数据库来直接访问底层的 wordpress 数据库。这是一个黑客,但它暂时解决了我的问题。
问题出在文件 wp-includes/class-IXR.php 上,它不适用于 HTTPS,您还必须使用 class-wp-http-ixr-client.php 。并且不要忘记包含配置文件 wp-load.php.
代码段将是:
private function getRecentPosts($num = 4)
{
include 'wordpress/wp-load.php';
require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-IXR.php';
require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-wp-http-ixr-client.php';
$user = '11111';
$pwd = '22222';
//Deprecated
/*
$host='https://www.rsywx.net';
$script='/wordpress/xmlrpc.php';
$port=443;
$client = new \IXR_Client($host, $script, $port);
*/
$client = new WP_HTTP_IXR_CLIENT('https://www.rsywx.net/wordpress/xmlrpc.php');
$params = array(0, $user, $pwd, $num);
$client->query('metaWeblog.getRecentPosts', $params);
$wp = $client->getResponse();
return $wp;
}
最近,我使用 SSL 更新了我的网站,所有 URI 现在都是 "https://"。
我的站点是使用 Symfony 2 开发的,并在 Symfony 2 web/wordpress
目录中混合了 Wordpress 安装。
所有常规访问都可以。只有一个问题:
在我的 Symfony 2 中,有这样的代码片段:
private function getRecentPosts($num = 4)
{
require_once 'wordpress/wp-includes/class-IXR.php';
$user = '11111';
$pwd = '22222';
$host='https://www.rsywx.net';
$script='/wordpress/xmlrpc.php';
$port=443;
$client = new \IXR_Client($host, $script, $port);
$params = array(0, $user, $pwd, $num);
$client->query('metaWeblog.getRecentPosts', $params);
$wp = $client->getResponse();
return $wp;
}
当我的网站没有用 https 包裹时,上面的代码可以正常工作。但是现在在https下,上面的代码就不行了。如果我在 query
函数调用后转储 $client
变量,它会给出如下错误:
+error: IXR_Error {#256 ▼
+code: -32300
+message: "transport error - could not open socket"
有什么提示吗?我需要调整我的 WP 吗?
我只是完全避免使用 XMLRPC 来解决这个问题。
在我的 Symfony 2 应用程序中,我只使用了第二个数据库来直接访问底层的 wordpress 数据库。这是一个黑客,但它暂时解决了我的问题。
问题出在文件 wp-includes/class-IXR.php 上,它不适用于 HTTPS,您还必须使用 class-wp-http-ixr-client.php 。并且不要忘记包含配置文件 wp-load.php.
代码段将是:
private function getRecentPosts($num = 4)
{
include 'wordpress/wp-load.php';
require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-IXR.php';
require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-wp-http-ixr-client.php';
$user = '11111';
$pwd = '22222';
//Deprecated
/*
$host='https://www.rsywx.net';
$script='/wordpress/xmlrpc.php';
$port=443;
$client = new \IXR_Client($host, $script, $port);
*/
$client = new WP_HTTP_IXR_CLIENT('https://www.rsywx.net/wordpress/xmlrpc.php');
$params = array(0, $user, $pwd, $num);
$client->query('metaWeblog.getRecentPosts', $params);
$wp = $client->getResponse();
return $wp;
}