首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用http.request获取node.js中的二进制内容

使用http.request获取node.js中的二进制内容
EN

Stack Overflow用户
提问于 2013-07-24 22:09:07
回答 7查看 76.9K关注 0票数 56

我想从https请求中检索二进制数据。

我发现了一个使用请求方法Getting binary content in Node.js using request类似的问题,它说将编码设置为null应该有效,但它不起作用。

代码语言:javascript
复制
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);
    });
})

编辑:将编码设置为二进制也不起作用

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-01-09 23:46:14

被接受的答案对我不起作用(例如,将编码设置为二进制),甚至提出问题的用户也提到它不起作用。

以下是对我有效的方法,摘自:http://chad.pantherdev.com/node-js-binary-http-streams/

代码语言:javascript
复制
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'));
    });
});

编辑:根据分号的建议进行更新回答

票数 98
EN

Stack Overflow用户

发布于 2013-07-24 22:15:50

需要将编码设置为response,而不是request:

代码语言:javascript
复制
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

票数 18
EN

Stack Overflow用户

发布于 2018-04-02 01:51:46

在AWS Lambda环境中运行在NodeJS 6.10(和8.10,2019年2月测试)上,上面的解决方案都不适合我。

对我来说起作用的是:

代码语言:javascript
复制
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对象。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17836438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档