Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
Cómo enviar un cuerpo comprimido con gzip

Queremos enviar el cuerpo comprimido mediante una solicitud HTTP gzip en chai-http en mocha.

 let chai = require('chai'); let chaiHttp = require('chai-http'); const zlib = require('zlib'); chai.use(chaiHttp); object = { "content": { "data": { "key": "testval" } } }; const objStr = JSON.stringify(object); const objBuf = Buffer.from(objStr, "utf-8"); const bodyContent = zlib.gzipSync(objBuf); const bodyLen = Buffer.byteLength(bodyContent, 'utf-8'); chai.request("http://serverurl") .post('/path') .set('Content-Type', 'application/json') .set('Content-Encoding', 'gzip') .set('Content-Length', bodyLen) .set('Accept-Encoding', 'gzip') .send(bodyContent) .end((err, res) => { expect(err).to.be.null; expect(res).to.have.status(200); done(); });

Sin embargo, encontramos el error Error: incorrect header check at Zlib.zlibOnError en el lado del servidor. ¿Hay algo que me estoy perdiendo?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Parece que es superagente, está rompiendo la codificación, porque encadena todo lo que no es una cadena y tiene application/json , entonces en lugar de un Buffer:

 <Buffer 1f 8b 08 00 00 00

está enviando un JSON:

 {"type":"Buffer","data":[31,139,8,0,...

rompiendo la codificación, causando el error.

Sucede aquí:

https://github.com/visionmedia/superagent/blob/2f4af99bdee91b9fc63c6563abae367a4b3f1a8e/src/node/index.js#L988-L996

Agregar !Buffer.isBuffer(data) o algo allí podría funcionar.

Hasta entonces, intente una solución alternativa, por ejemplo con http :

 const http = require('http') const options = { hostname: 'serverurl', port: 443, path: '/path', method: 'POST', headers: { 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip', 'Content-Length': bodyLen } }; const req = http.request(options, (res) => { //res.setEncoding('utf8'); //res.on('data', function(chunk) { // console.log('data', chunk); //}); expect(res).to.have.status(200); done(); }); req.on('error', function(e) { console.log('err: ' + e.message); //expect(err).to.be.null; process.exit(); }); req.write(bodyContent); req.end();
about 4 years ago · Juan Pablo Isaza Report

0

Pude hacer esta función para superagent anulando la función de serialización cuando application/json está en juego. Si el búfer se identifica como un búfer gzip, déjelo pasar por la serialización sin modificar.

 var isgzipBuffer = require('@stdlib/assert-is-gzip-buffer') superagent.serialize['application/json'] = function(...args) { if (isgzipBuffer(args[0]) === false) { return JSON.stringify(...args) } return args[0] }

También agregué esto para actualizar la codificación de contenido:

 if (isgzipBuffer(bodyParam) === true) { headerParams['Content-Encoding'] = 'gzip' }

Esto se hizo en el contexto de un cliente javascript codegen, por lo que la sintaxis exacta para configurar los encabezados puede variar.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!