我使用http.request卷曲网页,这是我的代码;
var curlUtil=function(option,callback){
var bufferHelper = new BufferHelper();
console.log(option);
var data='';
var req=http.request(option,function(res){
if(res.statusCode==301||res.statusCode==302){
var link=res.headers.location;
console.log('redirect:'+link);
curlUtil(link,function(data){
callback(data);
});
return;
}
res.on('data',function(chunk){
bufferHelper.concat(chunk);
});
res.on('end',function(){
var data=bufferHelper.toBuffer().toString();
callback(data);
});
});
req.end();
};
有时它工作正常,但有时它会破坏数据,当仍有数据等待获取时,将调用req.on('end');
。我不知道这是怎么发生的,但确实发生过,任何能告诉我应该怎么做的人都会这样做?
答案 0 :(得分:0)
要识别超时,请尝试执行以下操作:
req.on('socket', function (socket) {
socket.on('timeout', function() {
console.log('Timed out');
req.abort();
});
}
如果确认这是超时,则可以增加此值:
req.on('socket', function (socket) {
socket.setTimeout(60000);
socket.on('timeout', function() {
req.abort();
});
}
答案 1 :(得分:-1)
var curlUtil=function(option,callback){
var bufferHelper = new BufferHelper();
console.log(option);
var data='';
var req=http.request(option,function(res){
if(res.statusCode==301||res.statusCode==302){
var link=res.headers.location;
console.log('redirect:'+link);
curlUtil(link,function(data){
callback(data);
});
return;
}
res.on('data',function(chunk){
bufferHelper.concat(chunk);
});
res.on('end',function(){
var data=bufferHelper.toBuffer().toString();
callback(data);
});
});
// req.end();
};
req.end()将触发“结束”事件。即使数据正在翻译