proxpy中非人类可读的响应体

2024-03-28 18:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为proxpy写一个插件。这基本上是一个用python编写的HTTP/HTTPS代理。您可以通过实现两个函数来扩展它,两个函数的参数分别是HTTP请求和响应。像这样:

方法1(请求):

#您的实施

方法2(回答):

#您的实施

我只想将请求和响应写入一个文件。你知道吗

response对象有一个serialize()函数,我调用该函数以获取字符串形式的整个响应,然后将其写入文件。这是我的密码:

def proxy_mangle_response(res):
    temp = res.serialize()
    file_temp = open('test.txt', 'a')
    file_temp.write(temp + '\n\n')
    file_temp.close()

然而,问题是,响应主体被写为非人类可读的乱七八糟的东西,即使通过livehttpheaders(chrome扩展名)这样的东西检查时它看起来是HTML。你知道吗

serialize()方法由proxpy提供,实现如下:

def serialize(self):
        # Response line
        s = "%s %s %s" % (self.proto, self.code, self.msg)
        s += HTTPMessage.EOL

        # Headers
        for n,v in self.headers.iteritems():
        for i in v:
        s += "%s: %s" % (n, i)
        s += HTTPMessage.EOL

        s += HTTPMessage.EOL

        # Body
        if not self.isChunked():
            s += self.body
        else:
            # FIXME: Make a single-chunk body
            s += "%x" % len(self.body) + HTTPMessage.EOL
            s += self.body + HTTPMessage.EOL
            s += HTTPMessage.EOL
            s += "0" + HTTPMessage.EOL + HTTPMessage.EOL

        return s

要重现这个问题,点击'曙光网“在运行proxpy之后。第一个请求曙光网将重现该问题。你知道吗

以下是响应标头:

CF-RAY  1b2c4934487f073d-AMS
Connection  keep-alive
Content-Encoding    gzip
Content-Type    text/html
Date    Tue, 03 Feb 2015 05:39:05 GMT
Server  cloudflare-nginx
Transfer-Encoding   chunked
Vary    Accept-Encoding
X-Backend   www2
X-Developer Enjoy webdev? We like you, reach out at topcoder(at)compunode.com

我认为这是某种编码问题,而且头中有一些信息可以让浏览器正确地解释响应体。你知道吗


Tags: 文件方法函数selfhttpresponsedefbody
1条回答
网友
1楼 · 发布于 2024-03-28 18:28:19

事实证明,响应主体是使用gzip压缩的,从响应头Content-Encoding可以明显看出这一点。浏览器将在显示之前对其进行解压缩。如果Content-Encoding头值设置为gzip,则只需要使用zlib解压。你知道吗

相关问题 更多 >