अनुरोध का उपयोग करके Node.js में द्विआधारी सामग्री प्राप्त करना


136

मैं GETएक द्विआधारी डेटा का उपयोग करने की कोशिश कर रहा था request, और कुछ ऐसा था:

var requestSettings = {
    method: 'GET',
    url: url,
};
request(requestSettings, function(error, response, body) {
    // Use body as a binary Buffer
}

लेकिन bodyहमेशा उम्मीद से अलग कुछ बाइट्स थे। आगे की जांच पड़ताल करने के बाद मुझे पता चला कि requestग्रहण bodyस्ट्रिंग है और प्रतिस्थापित सभी गैर-यूनिकोड बाइट्स।

मैंने जोड़ने की कोशिश की

encoding: 'binary'

करने के लिए requestSettings, लेकिन यह मदद नहीं की।

मैं बाइनरी डेटा कैसे प्राप्त कर सकता हूं?

जवाबों:


301

ठीक है, बहुत खुदाई के बाद, मुझे पता चला कि requestSettingsहोना चाहिए:

encoding: null

और फिर डिफ़ॉल्ट के बजाय bodyटाइप का होगा Buffer, जो स्ट्रिंग है।


51
क्या बेतुका बुरा सपना। इसे शिकार करने के लिए मुझे 12 घंटे लगे। ऐसा लगता है कि डिफ़ॉल्ट रूप से, नोड अनुरोध मॉड्यूल प्रतिक्रिया की सामग्री में आने वाले डेटा को UTF-8 के रूप में मानता है, और स्वचालित रूप से किसी भी गैर-UTF-8 बाइट अनुक्रम को रद्दी (लेकिन मान्य UTF-8) वर्णों में परिवर्तित करता है। 'Mimetype "सेट करने की कोई राशि नहीं है, आदि काम करता है (यह नहीं है कि यह प्रतिक्रिया डेटा के लिए माना जाता है )। यह encoding: nullएकमात्र विकल्प है जो काम करता है। और - बहुत खराब दस्तावेज। वहाँ कैसे के बारे में नोड अनुरोध प्रलेखन में एक स्पष्ट चेतावनी होना चाहिए। शुद्ध बाइनरी डेटा को पुनः प्राप्त करने के लिए। धन्यवाद!
Dan Nissenbaum

2
@StoyanBerov, मुझे खुशी है कि आपको यह उत्तर उपयोगी लगा, लेकिन जब से मैंने यह उत्तर लिखा है, तब से 5 वर्षों में, पैकेज रेडीम को कई स्थानों पर इस समाधान को उजागर करने के लिए सही किया गया था। इसके अलावा, मैं इस पैकेज के बजाय वादे का समर्थन करने वाले पैकेज का उपयोग करने की अत्यधिक सलाह देता हूं।
गिलज

@ गिल्ज़, अपडेट के लिए धन्यवाद! मैं वास्तव में इस धारणा के तहत था कि एन्कोडिंग डिफ़ॉल्ट रूप से शून्य पर सेट है। इसके अलावा, यह मुद्दा एक विरासत परियोजना में आया, जो एक सुपर पुराने नोड संस्करण और कॉलबैक-केवल हर जगह सेट है।
स्टॉयन बेरोव

फिर से भाग गया - यह उम्र में इस्तेमाल नहीं किया है। एन्कोडिंग: बचाव के लिए अशक्त
Pyro

0

स्वीकृत उत्तर से मेरी समस्या हल नहीं हुई। मुझे किसी तरह लगा कि gzip: trueकाम किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.