节点HTTP请求未返回所有数据
Node HTTP request not returning all data
我在从网站下载完整数据时遇到问题。我正在做以下
request({url: 'http://somehost/somefile.txt'}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(response.headers);
console.log(body.length)
}
});
当在上面下载时,长度为64472字节。内容长度为65536。文件格式不正确。
如果我使用wget获取该文件,则得到的长度为65536,是一个合适的文件。
有什么想法可以让Node复制wget的结果吗?我试着将用户代理更改为wget,以防出现这种情况。
谢谢!
UPDATE:request
已经有encoding
选项一段时间了,只使用它而不是手动缓冲更容易。对于二进制数据,您可以如request
自述中所述设置encoding: null
,以获取包含二进制数据而不是(utf8)字符串的单个Buffer
实例。任何非null
的encoding
值都将直接传递给内部Buffer
的.toString()
方法。
问题是,当您将回调作为第二个参数传入时,request
模块将响应数据缓冲为utf8字符串。因此,对于二进制数据(或者对于节点不支持开箱即用的编码中的文本数据),您需要手动缓冲数据。例如:
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
});
});
相关文章:
- JSON数组数据返回Undefined
- AngularJS中的页面之间共享数据返回空
- post()向服务器动态生成的数据返回空响应
- 如何从jQuery对象文本正确调用服务器端ASP.NET并将数据返回给jQuery
- d3从mysql数据库导入数据返回“0”;未定义”;
- JSON可以't访问数据返回未定义
- 让 ajax 数据返回到调用函数 - 需要澄清之前的答案
- ajax 调用 PHP 数据返回 VM92:1 未捕获语法错误:意外的标记 {.
- Jquery ajax 请求无法将数据返回给其他函数
- 在 jquery 中将数据返回给 ajax 调用
- Meteor.methods:从内部回调将数据返回给客户端
- 将PHP数据返回到我当前的网页,供Javascript访问
- ajax 调用如何将数据返回给变量
- 将数据返回到索引.js节点表达式
- j查询帖子数据返回比较不起作用
- 节点 API 未将数据返回给客户端 ajax 请求
- jQuery 函数在 AJAX 数据返回上不起作用
- AJAX 将数据返回给 jquery
- 中继:获取递归数据返回空值
- 根据chrome.storage中的数据返回chrome.webRequest.onBeforeRequest的值