59

https リクエストからバイナリ データを取得したいと考えています。

リクエスト メソッドを使用 する同様の質問を見つけました。リクエストを使用して Node.js でバイナリ コンテンツを取得すると、エンコーディング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);
    });
})

編集:エンコーディングを「バイナリ」に設定しても機能しません

4

7 に答える 7

101

受け入れられた回答は私にとってはうまくいきませんでした(つまり、エンコーディングをバイナリに設定する)、質問をしたユーザーでさえ、それがうまくいかなかったと述べました。

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'));
    });
});

編集:セミコロンによる提案に従って回答を更新

于 2014-01-09T15:46:14.257 に答える
19

リクエストではなく、レスポンスにエンコーディングを設定する必要があります。

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);
    });
});

ここに役立つ答えがあります:ローカルサーバーへの画像の書き込み

于 2013-07-24T14:15:50.260 に答える