使用方法' HEAD'。
制作大量请求时出现问题我已将async.queue设置为20,并将超时设置为3000毫秒。 无论如何,当我跑: 我看到10-15的成功,比一些更成功的时间,一个挂起...没有进一步发生。
如果我删除超时我有大约10个成功并挂起... 我也没有得到错误信息。
请求代码:
function getHeader(link)
{
var correctUrl = url.parse(link);
var options = {method: 'HEAD', host: correctUrl.hostname, port: 80, path: correctUrl.pathname};
var req = http.request(options, function(res) {
if(res.statusCode == 404 || res.statusCode == 500) return;
var x = {
loc : link
};
if(typeof(res.headers['last-modified']) != "undefined")
{
x.lastmod = dateConverter(res.headers['last-modified']);
console.log("Added lastmodify: " + x.lastmod);
}
console.log(res.headers);
parser.allObjects.push(x);
});
req.setTimeout(3000, function() {
console.log("Timeout reached. Link:" + link);
req.abort();
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
req.end();
}
队列在这里:
var queue = async.queue(function (href, callback) {
getHeader(href,function(err){
if(err) return callback(err);
return callback();
});
}, parser.serverMight); // this set to 20 at the mom (decreased from 50)
queue.drain = function() {
formXml(null, parser.allObjects);
};
queue.push(toRequest, function(err) {
if(err) console.log(err);
});
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
以下是正确代码的外观:
function getHeader(link, callback)
{
httpreq.get(link, function(err, res) {
if(err) return callback(err);
if(res.statusCode == 404 || res.statusCode == 500)
{
parser.allHrefs.remove(parser.allHrefs.indexOf(link));
console.log("Faced status code 404 || 500. url deleted: " + link);
return callback(null);
}
//collect header-info
var x = { loc : link };
if(typeof(res.headers['last-modified']) != "undefined")
x.lastmod = dateConverter(res.headers['last-modified']);
console.log("Success adding header:" + x.loc);
parser.allObjects.push(x);
return callback(null);
});
}
p.s。:为什么'httpreq'(请求完整的请求正文)比'http'(请求HEAD)更快...