gpt4 book ai didi

node.js - 在 Node.JS Man In the Middle Proxy 上解码 GZIP 响应

转载 作者:行者123 更新时间:2023-12-03 12:19:23 24 4
gpt4 key购买 nike

我正在使用 typescript 在 Node 上开发 MITM 代理。我正在尝试解码使用 gzip 编码的响应。我不想只删除 accept-encoding header ,正如我在 SO 上的一些答案中看到的那样。我想使用 zlib 来解码响应主体,但由于某种原因,当我尝试加载使用 gzip 的页面(例如 github.com)时,页面未加载(图像、颜色、文本等)。我的解压缩不起作用,我不知道为什么。我用来解压缩响应主体的代码如下:

注意:serverResponse 是我(作为代理)连接到的服务器的响应(例如 github.com),proxyResponse 是我的响应(代理)到开始请求的客户端

  protected async receiveResponse(serverResponse: http.IncomingMessage, proxyResponse: http.ServerResponse) {

const contentEncoding = serverResponse.headers["content-encoding"]
let responseContent: http.IncomingMessage | zlib.Gunzip = serverResponse

if (contentEncoding && contentEncoding.toLowerCase().includes("gzip")) {
responseContent = zlib.createGunzip()
serverResponse.pipe(responseContent)
delete serverResponse.headers["content-encoding"]
}

let responseBody: Buffer

try {
responseBody = await this.collectMessageBody(responseContent)
} catch (error) {
console.log(error)
return
}

proxyResponse.writeHead(serverResponse.statusCode!, serverResponse.headers)
proxyResponse.write(responseBody)
proxyResponse.end()
}

private collectMessageBody(stream: http.IncomingMessage | zlib.Gunzip): Promise<Buffer> {
return new Promise<Buffer>((resolve, reject) => {
let bodyBuffers: Buffer[] = []

stream.on('data', chunk => bodyBuffers.push(chunk))
stream.on('end', () => resolve(Buffer.concat(bodyBuffers)))
stream.on('error', error => reject(error))
})
}

它遵循与 SO 上大多数答案相同的策略,但我不知道为什么我的不起作用。

OBS:这是一个开源项目,因此可以在此处找到整个文件:https://github.com/olmps/web-sniffer/blob/master/src/server.ts

我简化了逻辑,删除了不必要的内容以在此处发布。

例如,当加载使用 gzip 压缩其内容的 github.com 时,代理打开时我得到以下结果:

enter image description here

最佳答案

您也可以尝试处理 content-length header 。

如果content-encodinggzip 你可以尝试改变content-length header 的值为未压缩的body 的长度,不仅可以解压缩 body 。

希望这对您有所帮助。

关于node.js - 在 Node.JS Man In the Middle Proxy 上解码 GZIP 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62505328/

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