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