2013-07-24 11 views
20

Vorrei recuperare i dati binari da una richiesta https.Ottenere contenuto binario in node.js con http.request

Ho trovato un domanda simile che utilizza il metodo di richiesta, Getting binary content in Node.js using request, si dice impostazione codifica a nulla dovrebbe funzionare, ma non è così.

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

Edit: l'impostazione di codifica per 'binario' non funziona neanche

+0

Se si conosce la codifica si sta tentando di applicare ai dati può non lo converti abbastanza facilmente in binario? Voglio dire, si tratta di un computer, non hanno altra scelta per ricevere dati binari, ma ... – ChrisCM

risposta

38

la risposta accettata non ha funzionato per me (cioè, impostando la codifica in binario), anche l'utente che ha chiesto la qu la stirpe menzionata non funzionava.

ecco cosa ha funzionato per me, tratto da: 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')); 
    }); 
}); 

Edit: Aggiornamento risposta a seguito di un suggerimento da virgola

+1

Questo è corretto, ma non c'è bisogno di fare tutto che protoslicing ecc ... basta 'ritorno Buffer.concat (dati);' – Semicolon

+0

sono imbattuto in questo, per me, impostare la codifica su null con la get() opzioni non funzionano davvero per riferimento, cercando di impostare la codifica attraverso le impostazioni predefinite. per il modulo di richiesta non funziona. – TheDiveO

10

È necessario impostare la codifica alla risposta, non chiedere:

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

Ecco risposta utile: Writing image to local server

+2

questo codice dice dati deve essere un array di buffer, ma ci sono le stringhe ( – makc

Problemi correlati