通过curl以指定格式发送数据?

时间:2015-12-01 13:38:19

标签: php node.js curl

我有以下函数在php和nodejs之间进行通信:

function toNode($data){

    //$data is array
    //$data example
    //$data = array("one"=>"yes","two"=>"no","three"=>array("yet"=>"another"))

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:'.$socket_port.'/posts');

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);

    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_exec($ch);

    $feedback = curl_getinfo($ch);

}

以下是nodejs console.log 收到数据的方式:

 { one: 'yes',
 two: 'no',
'three[0][yet][0]':'another'}         //<---

这里是我希望数据在nodejs方面显示

{ one: 'yes',
two: 'no',
three: [ { yet: 'another' } ] }       //<---

我怎么能用卷曲来实现这个目标?我已尝试在收到的信息nodejs端使用此功能

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

但它失败了,什么也没输出如果我没记错的话。另外,进一步处理数据的函数在php curl或本地node js(不是url编码)之间共享所以,最好是在php端解决问题......有人可以帮助我吗?非常感谢你......

编辑:包括解析信息nodejs方:

app.post('/posts', function(req, res){

   if(req.headers.host == '127.0.0.1:'+socket_port) {
        if(req.method == 'POST') {
            var form = new formidable.IncomingForm();
            form.parse(req, function(err, fields, files) {

                res.writeHead(200, [[ "Content-Type", "text/plain"]
                        , ["Content-Length", 0]
                        ]);
                res.write('');
                res.end();

                furtherFunction(fields);                
            });
        }
    }

});

1 个答案:

答案 0 :(得分:0)

据我所知,你想要发送json数据。我这里没有看到任何json数据。我瞪了它。在这里send-json-post-using-php,我发现了如何在php中发送json数据。希望它会有所帮助。