流星HTTP.GET得到gzipped json回来怎么解压缩?

时间:2015-05-14 04:37:25

标签: meteor



var url = "https://www.parsehub.com/api/v2/projects/{PROJECT_TOKEN}/last_ready_run/data";
        var api_key = 'te79WidrkOmN_Fxs2e_kNnX5';
            url = url.replace('{PROJECT_TOKEN}', 'tbNBvhG208xhGUpecAk62V80');
            console.log('start fetching remote results from ' + url);
            this.unblock();
            HTTP.get(url, {params: {api_key: api_key}}, function(error, result) {
                if(error) {
                    console.log('http get FAILED!');
                } else {
                    console.log('http get SUCCESS');
                    if (result.statusCode === 200) {
                        console.log('Status code = 200!');
                        console.log(result.content);
                        
                    }
                }
            });




这里的result.content是gzip,如何解压缩?我试过gb96:zlib但是无法使它工作。使用HTTP.get自动解压缩gzipped响应时是否还有隐藏标志?

我也在http://meteorpad.com/pad/8LnKNnzusSNhzbQ5s/Leaderboard

将这个问题放在meteorpad上

要重现,只需选择一个播放器并点击"添加5个点"。

任何帮助将不胜感激。

谢谢,

2 个答案:

答案 0 :(得分:4)

对不起,我知道这是一个非常晚的回复,问题已经永远开放,但我有一个解决方案。

Http.get选项中,您可以将npmRequestOptions作为对象传递。在此对象中使用gzip : true,您的响应应该为您解压缩。

像这样......

HTTP.get("http://something", {
    "npmRequestOptions" : {"gzip" : true}
}, 
function(err, res) { 
    //response is decompressed! 
});

答案 1 :(得分:1)

Run Command:

npm install unzip

fs.createReadStream('path/to/archive.zip').pipe(unzip.Extract({ path: 'output/path' }));

或者将unzip.Parse()的输出传递给fstream

var readStream = fs.createReadStream('path/to/archive.zip');
var writeStream = fstream.Writer('output/path');

readStream
  .pipe(unzip.Parse())
  .pipe(writeStream)