Node.js没有下载完整的网站

时间:2017-02-22 19:25:54

标签: node.js

我将此代码下载到网站上,然后在下载完成后执行回调功能。

var request = require("request");

var options = {
  uri: "http://www.hellointernet.fm/podcast?format=rss",
  headers: {
    'User-Agent': 'request'
  }
};

request(options, function(error, response, body) {
  console.log(body);
});

但是在执行回调时它不会下载完整的网站。我尝试了其他网址,但它确实有效。

我怎么能等到整个页面下载完毕?

1 个答案:

答案 0 :(得分:1)

这里的问题是你正在处理一个表现不好的服务器。你的代码很好。

在线上,您的应用程序会写入此HTTP请求:

GET /podcast?format=rss HTTP/1.1
User-Agent: request
host: www.hellointernet.fm
Connection: close

然后,服务器响应每个请求的长度不同的数据,大约在70KB到我们期望的完整360,872字节之间。在完全发送服务器缓冲区之前,连接已关闭。服务器坏了,你可以做的不多。

但是,如果您告诉服务器您打算使用HTTP / 1.1 keep-alive,它可以正常工作。

GET /podcast?format=rss HTTP/1.1
User-Agent: request
host: www.hellointernet.fm
Connection: keep-alive

原因是服务器没有过早关闭连接。基本上,你正在乱砍服务器的bug。

要在您的代码中实现此功能,请将其添加到顶部附近:

var http = require('http');

然后,在您的请求选项中:

agent: http.Agent({keepAlive: true})

基本上,这告诉请求模块使用HTTP代理(这是在Node.js应用程序中启用keep-alive的原因)。通过代理,HTTP客户端可以使用keep-alive发出HTTP请求,这会破解服务器问题。

我建议联系任何人运行hellointernet.fm并告诉他们他们的服务器严重损坏。这可能会打破各种各样的客户。