【问题标题】:How to limit response length with http.request in Node.js如何在 Node.js 中使用 http.request 限制响应长度
【发布时间】:2013-03-26 11:36:43
【问题描述】:

因此,在这段(简化的)代码中,当有人访问我的节点服务器时,我向另一个网站发出 GET 请求并将 HTML 页面标题打印到控制台。工作正常:

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');

但是,在实际应用中,用户可以指定要点击的 URL。这意味着我的节点服务器可能正在下载 20GB 的电影文件或其他任何内容。不好。 content-length 标头也无法阻止此操作,因为它不是由所有服务器传输的。那么问题来了:

我如何告诉它在收到前 10KB 之后停止 GET 请求?

干杯!

【问题讨论】:

  • 检查content-type/mime-type怎么样?
  • 我可以这么想,但就像内容长度一样,它不是一个可靠的指标——我请求的服务器在技术上仍然可以发送任何长度的数据。 ……反正我是这么理解的!当然必须有一种方法可以在身体的前 10K 之后“挂断”。
  • 您可能要考虑的另一种方法是使用流并将它们通过管道传回客户端,这样您就不会缓冲整个响应。 docs.nodejitsu.com/articles/advanced/streams/…

标签: node.js http


【解决方案1】:

您可以在读取足够的数据后中止请求:

  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();

这将在大约 10.000 字节时中止请求,因为数据以各种大小的块的形式到达。

【讨论】:

  • 啊哈!这就是我需要的。非常感谢:)
  • 你能帮我澄清一件事吗?我已经通过在“str += chunk”之前添加一个console.log('something)进行检查,它只记录一次,但我确信我收到了多个数据块,所以在这种情况下它应该记录多次.. .
  • @Devasish 是的,您会期望如此,除非您使用与我的答案相同的代码并且请求被中止?
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 2011-11-06
  • 2017-01-26
  • 2013-07-24
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多