在将其添加到javascript文件中之前,我需要验证从网络服务获取的4000多个网址的有效性。 我正在使用一个grunt任务对这些URL进行一些清理操作,我还想验证每个url在将它们添加到js文件之前返回200个HTTP状态代码,因此在grunt任务中。
在示例中,基于valiate_url任务的结果,我需要修改urlToProxy数组
为了清楚起见,我想要构建的整个任务是:
关于我该怎么做的任何想法/建议?
grunt.initConfig({
...
exec: {
validate_url: {
cmd: function(url){
return 'curl -sL -w "%{http_code}\\n" "http://' + url + '" -o /dev/null';
},
callback: function (error, stdout, stderr) {
if(stdout==200){
// YES 200 returned
} else {
// OOPS NO 200 returned
}
}
}
}
});
grunt.registerTask('readconfig', 'reads the configuration', function() {
var urls = grunt.file.readJSON('.tmp/proxyUrls.json');
var urlsToProxy = urls.record.split('\n');
for(var i = urlsToProxy.length - 1; i >= 0; i--) {
grunt.task.run('exec:validate_url:' + 'urlsToProxy[i]);
}
}
proxyUrl.js内容
{ "record": "audentes.com\nfortuna.com\niuvat.com\n...\nwww.google.com" }
答案 0 :(得分:2)
您可以使用curl和Grunt中的https://github.com/dingo/api/issues/743#issuecomment-160514245执行此操作。
您可以在下面找到完整的代码示例。不要忘记创建一个package.json。运行它应该是这样的:
$npm init
$npm install grunt-exec --save
$grunt
这应该放在Gruntfile.js
module
.exports = function(grunt) {
grunt
.loadNpmTasks('grunt-exec'); // register the exec task (from package.json)
grunt
.initConfig({
exec: {
validate_url: {
cmd: function(url){
console
.log('validate: ' + url); // log that we are validating
return 'curl -sL -w "%{http_code}|%{url_effective}\\n" "http://www.google.com" -o /dev/null -m 5'; // the actual curl. Note the -m 5, this is a 5 second timeout. Also note the -w, this is the writeout which we will split later
},
callback: function (error, stdout, stderr) {
var stdoutSplit = stdout
.split('|');
if(stdoutSplit[0]==200){ // 200 status is returned
console
.log('YES 200, the requested url was: ' + stdoutSplit[1]); // YES 200 returned
} else {
console
.log('Crap, no 200, the requested url was: ' + stdoutSplit[1]);// OOPS NO 200 returned
}
}
}
}
});
grunt
.registerTask('default', function() {
grunt
.file
.readJSON('proxyUrls.json')
.record.split('\n')
.forEach(function(val){
if(val !== ''){
grunt.task.run('exec:validate_url:' + val);
}
});
});
};
注意强>:
从您自己的命令行尝试:curl -sL -w "%{http_code}\\n" "https://pastebin.com/raw.php?i=RPSbdNgR" -o /dev/null