node.js - 使用 http2 模块接收响应时解压缩 gzip - NodeJS
问题描述
const spdy = require("http2");
const zlib = require("zlib");
let payload = "<<DATA TO SEND>>"
const client = spdy.connect("https://<< HOSTNAME >>");
let outdata = '';
const req = client.request({
":authority": "<< Hostname >>",
":method": "POST",
":scheme": "https",
":path": "<< path >>",
"accept-encoding": "gzip"
});
req.setEncoding('utf8');
req.on("data", chunk => {
chunk = chunk.toString("utf-8");
outdata += chunk;
});
req.on("end", () => {
client.close();
console.log(outdata);
const data = JSON.parse(outdata);
// Write to do >>
});
req.write(payload);
req.end();
在使用 http2 模块接收响应时,我正在尝试解决像 gzip 这样的编码问题。
我查阅了以下链接,但这不是很有帮助。
如何使用 request 或 http 模块将 gzip 页面读入字符串
https://nodejs.org/api/zlib.html#zlib_compressing_http_requests_and_responses
如果有人对此有任何想法,那就太好了。
解决方案
const spdy = require("http2");
const zlib = require("zlib");
let payload = "<<DATA TO SEND>>"
const client = spdy.connect("https://<< HOSTNAME >>");
let outdata = '';
const req = client.request({
":authority": "<< Hostname >>",
":method": "POST",
":scheme": "https",
":path": "<< path >>",
"accept-encoding": "gzip"
});
req.setEncoding('utf8');
let zip = zlib.createGunzip();
req.pipe(zip);
zip.on("data", chunk => {
chunk = chunk.toString("utf-8");
outdata += chunk;
});
zip.on("end", () => {
client.close();
console.log(outdata);
const data = JSON.parse(outdata);
// Write to do >>
});
req.write(payload);
req.end();
这也需要您像 http 模块一样将 ClientHttp2Stream 放入管道中。
推荐阅读
- blazor - 为什么我的 Blazor 日期输入类型无法正常工作?
- python - 有没有一种方法可以创建可供 .NET 和 Python 使用的库?
- python - 我是 python 新手,我偶然发现了一个函数/变量?我不知道它是做什么的,有人可以解释一下吗?
- python - 如何在模板的类中显示函数的循环?
- reporting-services - 如何查找 SSRS 报告的最后部署日期
- c# - WPF Datagrid:根据单元格值为整行或行中的第一个单元格着色
- android - 自定义可绘制状态
- php - PHP 中 Iconomi API 中的身份验证
- microcontroller - int32_t 用于 32 微控制器中的堆栈
- linux - 大对齐的 mmap