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

Python 如何在转发到客户端之前修改从代理套接字/缓冲区捕获的HTTP响应中的压缩/编码内容,python,http,encoding,proxy,gzip,Python,Http,Encoding,Proxy,Gzip,我们希望在将HTTP响应发送回客户端之前捕获并修改代理内部的HTTP响应。我们正在使用python代理()。当我们从代理套接字/缓冲区读取HTTP流时,HTTP内容/正文被编码/压缩。我们需要对HTTP内容/正文进行解压缩/解码,修改内容并对其进行压缩/编码,然后将其返回给代理,以将修改后的响应转发回客户端。我们如何使用python实现这一点?任何帮助都将不胜感激 注意:我们不能对URL进行任何直接调用,因为此代码将在代理内运行 import gzip from io import BytesI

我们希望在将HTTP响应发送回客户端之前捕获并修改代理内部的HTTP响应。我们正在使用python代理()。当我们从代理套接字/缓冲区读取HTTP流时,HTTP内容/正文被编码/压缩。我们需要对HTTP内容/正文进行解压缩/解码,修改内容并对其进行压缩/编码,然后将其返回给代理,以将修改后的响应转发回客户端。我们如何使用python实现这一点?任何帮助都将不胜感激

注意:我们不能对URL进行任何直接调用,因为此代码将在代理内运行

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
假设有几件事:

  • 内容编码是gzip
  • 实际上,您可以从代理库中检索数据
  • 您已经以正确的方式收集了数据(如果已分块等),以便可以对其进行解压缩

  • aa到目前为止,您尝试了什么?:)到目前为止,我们尝试了以下方法:将HTTP内容写入文件,读取压缩的HTTP正文/内容,并将内容传递给解压函数,但解压数据失败。我猜我们缺少要解压缩的二进制文件的正确开始/结束的提取。一个好主意是发布失败的相关代码:)尝试查找如何从另一个库(python代理)中修改数据,感谢Torred的及时响应。我们面临的挑战是,如何提取HTTP正文或HTTP内容的压缩部分(压缩字节的开始/结束),删除标头,然后将该内容传递给解压缩函数。是的,内容编码是gzip。我们在Python代理(我们在这里使用)中没有看到任何库来提取解压缩的数据。我们从缓冲区/套接字读取原始http响应数据。第三点,是的,我们也看到内容长度被称为“分块”。不知道我们该怎么处理this@user1109998如果您已设法将HTTP内容写入文件,那么应该是
    头,data=data.split('\r\n\r\n');解压缩(数据)
    ,就这么简单。明白你的意思了,太好了!我现在就尝试一下,然后发布我的回复。很抱歉被打扰了amataure@user1109998嘿,别难过:)这是个有道理的问题!