我在从网站下载完整数据时遇到问题。我正在做以下
request({url: 'http://somehost/somefile.txt'}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(response.headers);
console.log(body.length)
}
});
上面下载时长度为64,472字节。内容长度为65,536。该文件格式错误。
如果我使用wget获取文件,则生成的长度为65,536,并且是正确的文件。
任何想法如何让Node复制wget的结果?我尝试将用户代理更改为wget以防万一。
谢谢!
答案 0 :(得分:3)
更新: request
现在有一段encoding
选项,而且更容易使用它而不是手动缓冲。对于二进制数据,您可以设置encoding: null
中提到的Buffer
以获取包含二进制数据而不是(utf8)字符串的单个null
实例。任何非encoding
Buffer
值都会直接传递到内部request
的{{3}}。
问题是,当您将回调作为第二个参数传递时,request({url: 'http://somehost/somefile.txt'}).on('response', function(res) {
// res === http.IncomingMessage object
var buffer = [],
bufsize = 0;
response.on('data', function(data) {
buffer.push(data);
bufsize += data.length;
}).on('end', function() {
var body = Buffer.concat(buffer, bufsize);
// body now contains the raw binary data
});
});
模块将响应数据缓冲为utf8字符串。因此,对于二进制数据(或对于节点不支持开箱即用的编码中的文本数据),您需要手动缓冲数据。例如:
{{1}}