如何在转发到客户端之前修改从代理套接字/缓冲区捕获的HTTP响应中的压缩/编码内容

0 投票
1 回答
1012 浏览
提问于 2025-04-18 01:58

我们想在代理服务器里捕获并修改HTTP响应,然后再把它发送回客户端。我们使用的是python-proxy这个工具(可以在这里找到:http://code.google.com/p/python-proxy/)。当我们从代理的套接字或缓冲区读取HTTP数据流时,HTTP的内容是经过编码或压缩的。我们需要先解压缩和解码这些内容,然后修改它们,最后再压缩和编码好,返回给代理服务器,以便把修改后的响应转发给客户端。我们该如何用Python来实现这个过程呢?任何帮助都非常感谢。

注意:由于这段代码是在代理内部运行的,我们不能直接访问这些网址。

1 个回答

0
import gzip
from io import BytesIO

def compress(data):
    if type(data) != type(b'bytes'):
        data = bytes(data, 'UTF-8')
    return gzip.compress(data)

def decompress(data):
    with gzip.GzipFile(fileobj=BytesIO(data)) as fh:
        try:
            unzipped = fh.read()
        except struct.error:
            return None
    return unzipped

假设有几个前提:

  1. 内容编码是gzip
  2. 你可以从代理库中获取数据
  3. 你已经以正确的方式收集了数据,比如如果是分块的等等,这样才能进行解压。

撰写回答