2015-12-01 3 views
4

Мне нужно проверить достоверность 4000+ URL-адресов, которые я получаю из веб-службы, прежде чем добавлять их в файл javascript. Я использую задачу grunt, чтобы выполнить некоторую операцию очистки на этих URL-адресах, и я также хотел бы проверить, что каждый url возвращает 200 HTTP-код состояния, прежде чем добавлять их в файл js, поэтому в рамках задачи grunt.Проверка ответа HTTP от задачи grunt

В примере, на основании результата valiate_url задачи мне нужно изменить массив urlToProxy

Для ясности всю задачу я хочу построить это:

  1. прочитанной URLs из API и запись в файл
  2. Cleanup список адресов (другой задачи, а не в коде примера)
  3. Validate URLs, чтобы проверить, если сервер ответит 200
  4. Напишите URL-адрес файла, содержащего простой массив js

Любая идея/предложение о том, как я могу это сделать?

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" } 
+1

ли мой ответ полезным? –

+0

Да, это уже хорошее направление, мне нужно теперь изменить входной массив на основе validate_url, что сложнее – fram

+0

вы там? –

ответ

2

Вы можете сделать это с завитком и exec в Гранте.

Ниже вы можете найти полный пример кода. Не забудьте создать 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

+0

спасибо, Боб, это уже хорошо, я пытаюсь изменить список входных данных в результате проверки, я добавлю дополнительную информацию в вопрос – fram

+0

@fram вы можете поделиться примером proxyUrls.json здесь http: // pastebin.com/? Не обязательно, чтобы все домены и могли быть поддельными, это больше, что мы можем перейти от конца к концу –

+0

Я добавил его в описание, структура очень проста – fram

Смежные вопросы