从 node-libcurl 获取状态、body 和 headers
Getting status, body, and headers from 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};
上放置断点表明 body
、headers
和 statusCode
已成功填充。但是,在curl.perform()
后打断点,显示curlStatus
、curlBody
、curlHeaders
变量仍然是空串。如何将信息传递给 parent 函数?
欢迎来到javascript和异步问题。
当您执行 curl.perform();
时,请求将开始但尚未完成,这就是您的变量 curlX
尚未填充的原因。
请求完成后,您使用 url.on('end', function...
定义的回调将被调用,您将填充这些变量。
我是插件的作者。
如果您对异步接口有问题,或者需要同步解决方案,我之前添加了对 Easy
句柄的支持,它们的使用几乎与 libcurl easy interface 完全一样。
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 ) );
然而,它的用户友好性较低。从现在开始,您需要构建 body 数组并自己创建 headers object。
HEADERFUNCTION
和 WRITEFUNCTION
回调将分别接收响应 body 和 headers 块。 buf
是一个 Node.js Buffer
object.
我在 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};
上放置断点表明 body
、headers
和 statusCode
已成功填充。但是,在curl.perform()
后打断点,显示curlStatus
、curlBody
、curlHeaders
变量仍然是空串。如何将信息传递给 parent 函数?
欢迎来到javascript和异步问题。
当您执行 curl.perform();
时,请求将开始但尚未完成,这就是您的变量 curlX
尚未填充的原因。
请求完成后,您使用 url.on('end', function...
定义的回调将被调用,您将填充这些变量。
我是插件的作者。
如果您对异步接口有问题,或者需要同步解决方案,我之前添加了对 Easy
句柄的支持,它们的使用几乎与 libcurl easy interface 完全一样。
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 ) );
然而,它的用户友好性较低。从现在开始,您需要构建 body 数组并自己创建 headers object。
HEADERFUNCTION
和 WRITEFUNCTION
回调将分别接收响应 body 和 headers 块。 buf
是一个 Node.js Buffer
object.