2013-10-17 32 views
25

Basit bir HTTP POST isteği göndermeye, yanıt gövdesini almaya çalışıyorum. "Zlib.gunzip" yönteminin içindeYanlış Üstbilgi node.js içinde zlib kullanıldığında kontrol edin

elde ediyorum. Node.js'ye yeni geldim ve herhangi bir yardımı takdir ediyorum.

;

fireRequest: function() { 

    var rBody = ''; 
    var resBody = ''; 
    var contentLength; 

    var options = { 
     'encoding' : 'utf-8' 
    }; 

    rBody = fSystem.readFileSync('resources/im.json', options); 

    console.log('Loaded data from im.json ' + rBody); 

    contentLength = Buffer.byteLength(rBody, 'utf-8'); 

    console.log('Byte length of the request body ' + contentLength); 

    var httpOptions = { 
     hostname : 'abc.com', 
     path : '/path', 
     method : 'POST', 
     headers : { 
      'Authorization' : 'Basic VHJhZasfasNWEWFScsdfsNCdXllcjE6dHJhZGVjYXJk', 
      'Content-Type' : 'application/json; charset=UTF=8', 
      // 'Accept' : '*/*', 
      'Accept-Encoding' : 'gzip,deflate,sdch', 
      'Content-Length' : contentLength 
     } 
    }; 

    var postRequest = http.request(httpOptions, function(response) { 

     var chunks = ''; 
     console.log('Response received'); 
     console.log('STATUS: ' + response.statusCode); 
     console.log('HEADERS: ' + JSON.stringify(response.headers)); 
     // response.setEncoding('utf8'); 
     response.setEncoding(null); 
     response.on('data', function(res) { 
      chunks += res; 
     }); 

     response.on('end', function() { 
      var encoding = response.headers['content-encoding']; 
      if (encoding == 'gzip') { 

       zlib.gunzip(chunks, function(err, decoded) { 

        if (err) 
         throw err; 

        console.log('Decoded data: ' + decoded); 
       }); 
      } 
     }); 

    }); 

    postRequest.on('error', function(e) { 
     console.log('Error occured' + e); 
    }); 

    postRequest.write(rBody); 
    postRequest.end(); 

} 
+0

Eğer yığın izleme gönderir misiniz? – hexacyanide

+1

Küçük bir ipucu: Kod girerken, sekme yerine boşluk kullanın. Biçimlendirme için daha kolay hale getirir. – thtsigma

+0

zlib.gunzip yerine zlib.unzip kullanıyorum – Evgenii

cevap

12

response.on('data', ...) bir Buffer değil, sadece düz dizeleri kabul edebilir. Birbirini tamamladığınızda, dizgeye yanlış bir şekilde dönüyorsunuz ve daha sonra silahsızlaştıramazsınız. 2 seçeneğiniz var:

1) Tüm arabellekleri bir dizide toplayın ve end olayında bunları Buffer.concat() kullanarak birleştirin. Sonra sonuçta gunzip'i arayın.

2) .pipe() kullanın ve yanıtı bir gunzip nesnesine pipetleyin, sonucun belleğe alınmasını istiyorsanız, bir dosyanın akışına ya da bir dize/arabellek dizesine aktarın.

Her iki seçenek (1) ve (2) burada tartışılır: http://nickfishman.com/post/49533681471/nodejs-http-requests-with-gzip-deflate-compression