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