【发布时间】:2012-08-22 08:27:23
【问题描述】:
如何在请求的模块响应中解压缩压缩后的正文?
我在网上尝试了几个例子,但似乎都没有。
request(url, function(err, response, body) {
if(err) {
handleError(err)
} else {
if(response.headers['content-encoding'] == 'gzip') {
// How can I unzip the gzipped string body variable?
// For instance, this url:
// http://highsnobiety.com/2012/08/25/norse-projects-fall-2012-lookbook/
// Throws error:
// { [Error: incorrect header check] errno: -3, code: 'Z_DATA_ERROR' }
// Yet, browser displays page fine and debugger shows its gzipped
// And unzipped by browser fine...
if(response.headers['content-encoding'] && response.headers['content-encoding'].toLowerCase().indexOf('gzip') > -1) {
var body = response.body;
zlib.gunzip(response.body, function(error, data) {
if(!error) {
response.body = data.toString();
} else {
console.log('Error unzipping:');
console.log(error);
response.body = body;
}
});
}
}
}
}
【问题讨论】:
-
浏览器不应该透明地这样做吗?
-
我添加了 node.js 标记,但我明白这并不清楚...让我编辑帖子...
-
您可以将数据保存到文件
req.gz并从命令行解压缩吗?如果是,gunzip req.gz和file req.gz的输出是什么 -
你好安德鲁!谢谢你的建议。如果我将文件保存到“req.gz”文件,在桌面上提取它会生成一个名为“req.gz.cpgz”的文件。依次提取此文件会生成名为“req 2.gz”的第三个文件。请求正文在读取正文之前被编码为 utf8 (response.setEncoding('utf8'))。但是,它似乎没有什么不同。我得到同样的错误和类似的桌面文件结果。
-
request 3.0 将在 node v0.10 发布后自动支持此功能
标签: javascript node.js express zlib