首页 > 解决方案 > 使用 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

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

标签: node.jsstreamzlibunziphttp2

解决方案


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 放入管道中。


推荐阅读