2012-03-02 9 views
12

È possibile eseguire essenzialmente un wget all'interno di un'app node.js? Mi piacerebbe avere uno script che esegue la scansione di un sito e scarica un file specifico, ma lo href del collegamento che esegue il file cambia abbastanza spesso. Quindi, ho pensato che il modo più semplice per farlo sarebbe trovare il href del link, quindi eseguire semplicemente un wget su di esso.Come posso replicare la funzionalità di un wget con node.js?

Grazie!

+1

Vedere la documentazione node.js per ['child_process.exec (cmd)'] (http://nodejs.org/docs/latest/api/all.html# all_child_process_exec_command_options_callback). – maerics

risposta

8

È possibile eseguire un comando esterno utilizzando child_processes:

http://nodejs.org/docs/latest/api/child_process.html#child_process_child_process_exec_command_options_callback

var util = require('util'), 
    exec = require('child_process').exec, 
    child, 
    url = 'url to file'; 

child = exec('wget ' + url, 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 
+2

Questo risponde alla domanda, ma perché dovresti farlo quando puoi usare la richiesta? – dovidweisz

2

U può semplicemente utilizzare wget.

var exec = require('child_process').exec; 

child = exec("/path/to/wget http://some.domain/some.file", function (error, stdout, stderr) { 
if (error !== null) { 
    console.log("ERROR: " + error); 
} 
else { 
    console.log("YEAH IT WORKED"); 
} 
}); 
16

Per riferimento futuro, però, mi sento di raccomandare request, il che rende questo facile per andare a prendere quel file:

var request = require("request"); 

request(url, function(err, res, body) { 
    // Do funky stuff with body 
}); 
13

Mentre potrebbe essere un po 'più dettagliata di alcune cose di terze parti, Nodo Core Module HTTP prevede un HTTP client si potrebbe usare per questo:

var http = require('http'); 
var options = { 
    host: 'www.site2scrape.com', 
    port: 80, 
    path: '/page/scrape_me.html' 
    }; 
var req = http.get(options, function(response) { 
    // handle the response 
    var res_data = ''; 
    response.on('data', function(chunk) { 
    res_data += chunk; 
    }); 
    response.on('end', function() { 
    console.log(res_data); 
    }); 
}); 
req.on('error', function(err) { 
    console.log("Request error: " + err.message); 
}); 
+1

Mi piace il fatto che questa risposta utilizzi solo la libreria Node principale. Buon lavoro – nic

+0

Se stai cercando lavoro ancora meno, senza aggiungere una dipendenza, usando il metodo 'parse' del modulo' url' incorporato otterrai un oggetto che puoi usare invece di costruire 'opzioni'. (Supponendo di avere già un URI di stringa per passarlo). – Tersosauros

1

È possibile utilizzare node-wget. Funziona nei casi in cui 'wget' non è possibile

Problemi correlati