我将此代码下载到网站上,然后在下载完成后执行回调功能。
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);
});
但是在执行回调时它不会下载完整的网站。我尝试了其他网址,但它确实有效。
我怎么能等到整个页面下载完毕?
答案 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并告诉他们他们的服务器严重损坏。这可能会打破各种各样的客户。