readstream nodejs node.js zlib

node.js - nodejs - zlib js



ComprobaciĆ³n de encabezado incorrecta al usar zlib en node.js (1)

Estoy intentando enviar una solicitud HTTP POST simple, recuperar el cuerpo de la respuesta. Seguir mi código. estoy obteniendo

Error: Comprobación incorrecta del encabezado

Dentro del método "zlib.gunzip". Soy nuevo en node.js y aprecio cualquier ayuda.

;

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


response.on(''data'', ...) puede aceptar un Buffer , no solo cadenas simples. Al concatenar, se está convirtiendo en una cadena de manera incorrecta, y luego no puede gunzip. Tienes 2 opciones:

1) Recopile todos los búferes de una matriz y, en el evento end , Buffer.concat() utilizando Buffer.concat() . Entonces llame a gunzip sobre el resultado.

2) Use .pipe() y .pipe() la respuesta a un objeto gunzip, canalizando la salida de eso a una secuencia de archivos o una cadena / cadena de búfer si desea el resultado en la memoria.

Ambas opciones (1) y (2) se tratan aquí: http://nickfishman.com/post/49533681471/nodejs-http-requests-with-gzip-deflate-compression