简单的node.js http请求代理给我一个gzip错误

我正在使用下面的代码,启动一个接受http请求的服务器,然后将它们转发到https api,然后中继响应。

我有一个问题,就是api给出了“ Content-Encoding:gzip”响应,这似乎给我带来了麻烦。

如果我不中继gzip响应标头,那么我正在测试的C#代码将获得一个响应,该响应只是随机符号,即我假定的压缩数据,就像Postman一样。当我按照下面的示例进行包含时,我得到StatusCode 0:“ GZip标头中的魔术数字不正确。请确保您正在传递GZip流。”

我尝试将响应标头传递回:

res.writeHead(cres.statusCode,cres.headers});

但是这似乎又导致输出混乱。我该如何解决?

const https = require('https')
const port = 55555

const requestHandler = (req,res) => {
  console.log(req.url)

  var options = {
    host:   'my.api.com',path:   '/7f308b16-d165-4062-b00f-76970783442e'+req.url,path:   req.url,method: 'GET',headers: req.headers
  };

  var json = '';

  var creq = https.request(options,function(cres) {

    // set encoding
    cres.setEncoding('utf8');

    // wait for data
    cres.on('data',function(chunk){
      console.log('data: '+chunk);
      json += chunk;
    });

    cres.on('close',function(){
      console.log('close: '+cres.statusCode);
      res.writeHead(cres.statusCode);
      res.end();
    });

    cres.on('end',function(){
      console.log('end: '+json.toString());
      console.log(res.headers)
      res.writeHead(cres.statusCode,{'Content-Encoding': 'gzip','Content-Type':'text/json; charset=utf-8','Cache-Control':'private'  });
      res.end(json);
    });

  }).on('error',function(e) {
    // we got an error,return 500 error to client and log error
    console.log(e.message);
    res.writeHead(500);
    res.end();
  });

  creq.end();
}

const server = http.createServer(requestHandler)

server.listen(port,(err) => {
  if (err) {
    return console.log('something bad happened',err)
  }

  console.log(`server is listening on ${port}`)
})```

zzxx1z2x 回答:简单的node.js http请求代理给我一个gzip错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3069026.html

大家都在问