我想从https请求中检索二进制数据。
我发现了一个使用请求方法Getting binary content in Node.js using request的类似的问题,它说将编码设置为null应该有效,但它不起作用。
options = {
hostname: urloptions.hostname,
path: urloptions.path,
method: 'GET',
rejectUnauthorized: false,
encoding: null
};
req = https.request(options, function(res) {
var data;
data = "";
res.on('data', function(chunk) {
return data += chunk;
});
res.on('end', function() {
return loadFile(data);
});
res.on('error', function(err) {
console.log("Error during HTTP request");
console.log(err.message);
});
})
编辑:将编码设置为二进制也不起作用
发布于 2014-01-09 23:46:14
被接受的答案对我不起作用(例如,将编码设置为二进制),甚至提出问题的用户也提到它不起作用。
以下是对我有效的方法,摘自:http://chad.pantherdev.com/node-js-binary-http-streams/
http.get(url.parse('http://myserver.com:9999/package'), function(res) {
var data = [];
res.on('data', function(chunk) {
data.push(chunk);
}).on('end', function() {
//at this point data is an array of Buffers
//so Buffer.concat() can make us a new Buffer
//of all of them together
var buffer = Buffer.concat(data);
console.log(buffer.toString('base64'));
});
});
编辑:根据分号的建议进行更新回答
发布于 2013-07-24 22:15:50
需要将编码设置为response,而不是request:
req = https.request(options, function(res) {
res.setEncoding('binary');
var data = [ ];
res.on('data', function(chunk) {
data.push(chunk);
});
res.on('end', function() {
var binary = Buffer.concat(data);
// binary is your data
});
res.on('error', function(err) {
console.log("Error during HTTP request");
console.log(err.message);
});
});
以下是有用的答案:Writing image to local server
发布于 2018-04-02 01:51:46
在AWS Lambda环境中运行在NodeJS 6.10(和8.10,2019年2月测试)上,上面的解决方案都不适合我。
对我来说起作用的是:
https.get(opt, (res) => {
res.setEncoding('binary');
let chunks = [];
res.on('data', (chunk) => {
chunks.push(Buffer.from(chunk, 'binary'));
});
res.on('end', () => {
let binary = Buffer.concat(chunks);
// binary is now a Buffer that can be used as Uint8Array or as
// any other TypedArray for data processing in NodeJS or
// passed on via the Buffer to something else.
});
});
注意res.setEncoding( 'binary')和Buffer.from(chunk,‘binary’)行。一个设置响应编码,另一个从前面指定的编码中提供的字符串创建一个Buffer对象。
https://stackoverflow.com/questions/17836438
复制相似问题