瀏覽代碼

feat: support compressed responses

nsankbeil 2 年之前
父節點
當前提交
3a29262256
共有 1 個文件被更改,包括 11 次插入2 次删除
  1. 11 2
      src/utils/proxy/http.js

+ 11 - 2
src/utils/proxy/http.js

@@ -1,5 +1,7 @@
 /* eslint-disable prefer-promise-reject-errors */
 /* eslint-disable prefer-promise-reject-errors */
 /* eslint-disable no-param-reassign */
 /* eslint-disable no-param-reassign */
+import { createUnzip } from "node:zlib";
+
 import { http, https } from "follow-redirects";
 import { http, https } from "follow-redirects";
 
 
 import { addCookieToJar, setCookieHeader } from "./cookie-jar";
 import { addCookieToJar, setCookieHeader } from "./cookie-jar";
@@ -28,12 +30,19 @@ function handleRequest(requestor, url, params) {
 
 
     const request = requestor.request(url, params, (response) => {
     const request = requestor.request(url, params, (response) => {
       const data = [];
       const data = [];
+      const contentEncoding = response.headers['content-encoding']?.trim().toLowerCase();
+
+      let responseContent = response;
+      if (contentEncoding === 'gzip' || contentEncoding === 'deflate') {
+        responseContent = createUnzip();
+        response.pipe(responseContent);
+      }
 
 
-      response.on("data", (chunk) => {
+      responseContent.on("data", (chunk) => {
         data.push(chunk);
         data.push(chunk);
       });
       });
 
 
-      response.on("end", () => {
+      responseContent.on("end", () => {
         addCookieToJar(url, response.headers);
         addCookieToJar(url, response.headers);
         resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
         resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
       });
       });