0
gzipped jsonファイルをhttp://api.discogs.com/release/339901から取得しようとしています。Node.js Gzip inflating - node-compress
https://github.com/waveto/node-compressがインストールされていますが、スタックオーバーフローAPIをリクエストするとすべて正常に動作しますが、ディスコグをリクエストしようとするとエラーが発生します。
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);
});
});
をそれが問題だったようにはい、見えます。あなたが "Accept-Encoding": "gzip"でリクエストしてから、gzipではなく送信した場合にのみ応答を送信するというのは奇妙です。私は使用し終わったものを更新しました。ありがとう。 – bradley