Wordpress XMLRPC返回空白,但成功

时间:2010-12-23 15:37:15

标签: php wordpress curl xml-rpc

我正在尝试使用curl通过PHP发布到WordPress - 我默认使用内置到Wordpress中的XMLRPC进行发布。

使用以下代码发布成功,但未返回任何内容。我需要知道关于帖子的一些信息,例如它的URL - 如果我有'post ID',我可以这样做,通过查看xmlrpc.php文件,它应该返回。以下是我发布的代码:

    function post($username, $password, $title, $content, $url, $category=array(), $keywords='', $type='Wordpress')
{
    $encoding = 'UTF-8';

    $title = htmlentities($title,ENT_NOQUOTES,$encoding);
    $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);

    $reqparams = array(
        'title'=>$title,
        'description'=>$content,
        'mt_allow_comments'=>0,  // 1 to allow comments
        'mt_allow_pings'=>0,  // 1 to allow trackbacks
        'post_type'=>'post',
        'mt_keywords'=>$keywords,
        'categories'=>$category
    );
    $params = array(0,$username,$password,$reqparams,true);
    $request = xmlrpc_encode_request('metaWeblog.newPost',$params);
    $ch = curl_init();

    $fp = fopen('/home/*/public_html/file.txt', 'w+');

    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_STDERR, $fp);
    $results = curl_exec($ch);
    echo '<pre>'.print_r($results, true).'</pre>';
    curl_close($ch);
    return $results;

}

echo '<pre>'.print_r($re...行只显示<pre></pre>。我已经将curl的详细输出写入文件,请在下面找到它(我已经出了网址):

* About to connect() to www.*******.com port 80 (#0)
*   Trying 87.106.55.179... * connected
* Connected to www.*******.com (87.*.*.179) port 80 (#0)
> POST /xmlrpc.php HTTP/1.1
Host: www.*******.com
Accept: */*
Content-Length: 1445
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

< HTTP/1.1 100 Continue
* Operation timed out after 1000 milliseconds with 0 bytes received
* Closing connection #0

正如我所说,代码发布,但没有返回。很抱歉直言不讳,但我知道这将引发一系列毫无意义的答案。那么,我应该期待一个帖子ID被退回,如果没有,我怎么能轻易地将它返回?

由于

2 个答案:

答案 0 :(得分:4)

索德定律。发布后,我尝试将最大超时时间:curl_setopt($ch, CURLOPT_TIMEOUT, 1);更改为10:curl_setopt($ch, CURLOPT_TIMEOUT, 10);,我得到了一些很好的XML,其中嵌入了帖子ID。

我没有删除这篇文章,因为我觉得它可能对某人有用。

答案 1 :(得分:-2)

它将返回($ results)结果为xml ...我认为在你的程序中它不会在屏幕上显示任何内容(但你可以在输出屏幕的源代码中看到xml数据)..你应该使用xmlrpc_decode或XML解析函数从返回的XML中获取数据。在您的程序中,它将返回新创建的帖子ID。

对于您的计划,我认为以下更改将完成工作

$results = curl_exec($ch);
$results = xmlrpc_decode($results);
echo '<pre>'.print_r($results, true).'</pre>';