从node-libcurl获取状态,正文和标题

时间:2016-04-28 15:11:49

标签: javascript node.js curl libcurl node-libcurl

我在Node.js应用程序中有以下代码:

var curlStatus = ""; 
var curlBody = ""; 
var curlHeaders = ""; 
var curlInfo = curl.on('end', function( statusCode, body, headers){
    curlStatus = statusCode; 
    curlBody = body; 
    curlHeaders = headers; 

    //this.close(); 
    return {status: curlStatus, body: curlBody, headers: curlHeaders}; 
}); 

curl.on('error', function(){
    console.log("CURL ERROR");
}); 

curl.perform(); 

return {status: curlStatus, body: curlBody, headers: curlHeaders};上放置断点表示bodyheadersstatusCode已成功填充。但是,在curl.perform()之后设置断点会显示curlStatuscurlBodycurlHeaders变量仍为空字符串。如何将信息传递给父函数?

2 个答案:

答案 0 :(得分:2)

欢迎使用javascript和异步问题。

当您执行curl.perform();时,请求将开始但尚未完成,这就是您的变量curlX尚未填充的原因。 请求完成后,将调用您使用url.on('end', function...定义的回调,并填充这些变量。

答案 1 :(得分:2)

我是插件的作者。

如果您遇到异步接口问题或需要同步解决方案,我前段时间已经添加了对Easy句柄的支持,它们几乎与libcurl easy interface完全相同。< / p>

var Easy = require( 'node-libcurl' ).Easy,
    Curl = require( 'node-libcurl' ).Curl,
    url = process.argv[2] || 'http://www.google.com',
    ret,
    ch;

ch = new Easy();

ch.setOpt( Curl.option.URL, url );

ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {

    console.log( 'HEADERFUNCTION: ' );
    console.log( arguments );

    return size * nmemb;
});

ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {

    console.log( 'WRITEFUNCTION: ' );
    console.log( arguments );

    return size * nmemb;
});

ret = ch.perform();

ch.close();

console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );

然而,用户友好程度较低。从现在开始,您需要构建主体数组并自己创建头部对象。

HEADERFUNCTIONWRITEFUNCTION回调将分别接收响应正文和标题块。 buf是Node.js Buffer对象。