2011-08-01 99 views
0

我想從http://api.discogs.com/release/339901拉一個gzipped json文件。Node.js Gzip充氣 - 節點壓縮

我已經安裝了https://github.com/waveto/node-compress,並且所有工作都正常,如果我向Stack Overflow API發出請求,但是一旦我嘗試請求discog,就會收到錯誤消息。

Assertion failed: (ret != Z_STREAM_ERROR), function GunzipInflate, file ../compress.cc, line 271. 
Abort trap: 6 

代碼:

var options = { 
     host: 'api.discogs.com', 
     port: 80, 
     path: '/release/339901', 
     headers: { 
      "Accept-Encoding": "gzip" 
     } 
    }; 

    var options = { 
     host: 'api.stackoverflow.com', 
     port: 80, 
     path: '/1.1/questions', 
     headers: { 
      "Accept-Encoding": "gzip" 
     } 
    } 

    http.get(options, function(res){ 

     var body = []; 
     var gunzip = new compress.Gunzip(); 
     gunzip.init(); 

     res.setEncoding('binary'); 

     res.on('data', function(chunk){ 
      body.push(gunzip.inflate(chunk, 'binary')); 
     }); 

     res.on('end', function(){ 
      gunzip.end(); 
      callback(null, JSON.parse(body.join('')), response); 
     }); 

     res.on('error', function(e){ 
      callback(e, null, response); 
     }); 

    }); 



function callback(err, data, res) { 
    if(err) { 
     console.log(err); 
    } 
    else { 
     res.end(JSON.stringify(data)); 
    } 
} 

任何想法?

UPDATE:

似乎他們並沒有將其發送gzip壓縮。這是我最終使用的。

var options = { 
     host: 'api.discogs.com', 
     port: 80, 
     path: '/release/339901', 
     headers: { 
      "Accept-Encoding": "gzip" 
     } 
    }; 

    http.get(options, function(getRes){ 
     var body = ""; 

     getRes.on('data', function(chunk){ 
      body = body + chunk; 
     }); 

     getRes.on('end', function(err, data){ 
      res.end(body); 
     }); 
    }); 

回答

3

看來,api.discogs.com沒有返回gzip編碼響應。

您應該檢查content-encoding頭第一:

if (res.headers['content-encoding'] === 'gzip') { ... } 

問了一個gzip編碼的響應( 「接受編碼」: 「壓縮」)並不能保證它。

您可以驗證這樣說:

console.log(JSON.stringify(res.headers)); 

res.on('data', function(chunk){ 
    console.log(chunk.toString()); 
}); 
+0

是的,貌似這就是問題所在。奇怪的是,他們只發送響應,如果您請求「接受編碼」:「gzip」,但然後發送它不gzip。我已經更新了我最終使用的內容。謝謝。 – bradley