Javascript node.js http.request有时会获取损坏的数据
我使用http.request卷曲一个网页,这是我的代码Javascript node.js http.request有时会获取损坏的数据,javascript,node.js,curl,Javascript,Node.js,Curl,我使用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.statusCod
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')当仍有数据等待获取时,将调用代码>。我不知道这是怎么发生的,但它确实发生了,谁能告诉我该怎么办
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()将触发“end”事件。即使数据正在转换以识别超时,也可以尝试这样做:
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();
});
}
我阅读了nodejs api(示例注意,在示例中调用了req.end()。使用http.request()时,必须始终调用req.end(),以表示您已完成请求-即使没有数据写入请求正文。
我必须调用.end()方法,否则它将始终请求。您所说的断开数据是什么意思?您能给我们展示一个选项
对象的示例吗?请确保这不是一个超时情况,如下所述:我请求此页面。有时我只获取html的一部分。