gpt4 book ai didi

http - 如何使用 request 或 http 模块将 gzip 页面读入字符串

转载 作者:IT老高 更新时间:2023-10-28 23:06:58 26 4
gpt4 key购买 nike

发现js中的request模块无法正确处理gzip或inflate格式http响应。

例如:

request({url:'some url'}, function (error, response, body) {
//if the content-encoding is gzip, the body param here contains binaries other than readable string. And even worse after you convert the body to buffer, u even can not gunzip it.
}

所以我想使用官方文档中的示例代码。

var request = http.get({ host: 'izs.me',
path: '/',
port: 80,
headers: { 'accept-encoding': 'gzip,deflate' } });
request.on('response', function(response) {
var output = fs.createWriteStream('izs.me_index.html');

switch (response.headers['content-encoding']) {
// or, just use zlib.createUnzip() to handle both cases
case 'gzip':
response.pipe(zlib.createGunzip()).pipe(output);
break;
case 'deflate':
response.pipe(zlib.createInflate()).pipe(output);
break;
default:
response.pipe(output);
break;
}
});

问题是代码正在将网页写入文件,我希望它可以将页面写入字符串,以便我可以处理页面。我找不到像'StringStream'这样的类。

如果有人对此有任何想法,那就太好了。

最佳答案

将响应传送到 gzip 流并像使用原始响应对象一样使用它。

var req = http.request(options, function(res) {
var body = "";

res.on('error', function(err) {
next(err);
});

var output;
if( res.headers['content-encoding'] == 'gzip' ) {
var gzip = zlib.createGunzip();
res.pipe(gzip);
output = gzip;
} else {
output = res;
}

output.on('data', function (data) {
data = data.toString('utf-8');
body += data;
});

output.on('end', function() {
return next(false, body);
});
});

req.on('error', function(err) {
next(err);
})

关于http - 如何使用 request 或 http 模块将 gzip 页面读入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com