Come limitare la lunghezza della risposta con http.request in Node.js

Quindi, in questo (semplificato) bit di codice, quando qualcuno colpisce il mio server nodo, faccio una richiesta GET a un altro sito Web e stampo il titolo della pagina HTML sulla console. Funziona bene:

var http = require("http"); var cheerio = require('cheerio'); var port = 8081; s = http.createServer(function (req, res) { var opts = { method: 'GET', port: 80, hostname: "pwoing.com", path: "/" }; http.request(opts, function(response) { console.log("Content-length: ", response.headers['content-length']); var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function() { dom = cheerio.load(str); var title = dom('title'); console.log("PAGE TITLE: ",title.html()); }); }).end(); res.end("Done."); }).listen(port, '127.0.0.1'); 

Tuttavia, nell’app effettiva, gli utenti possono specificare un URL da colpire. Ciò significa che il mio server di nodes potrebbe scaricare file di film da 20 GB o qualsiasi altra cosa. Non bene. L’intestazione di lunghezza del contenuto non è utile per arrestare questo perché non viene trasmesso da tutti i server. La domanda quindi:

Come posso dire di interrompere la richiesta GET dopo che, ad esempio, i primi 10 KB sono stati ricevuti?

Saluti!

Puoi annullare la richiesta una volta che hai letto abbastanza dati:

  http.request(opts, function(response) { var request = this; console.log("Content-length: ", response.headers['content-length']); var str = ''; response.on('data', function (chunk) { str += chunk; if (str.length > 10000) { request.abort(); } }); response.on('end', function() { console.log('done', str.length); ... }); }).end(); 

Questo annullerà la richiesta a circa 10.000 byte, poiché i dati arrivano in blocchi di varie dimensioni.