我正在使用下面的代码,启动一个接受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}`)
})```