你如何使用python套接字模块读取HTTP响应?

时间:2012-09-03 14:42:06

标签: python sockets proxy

我正在使用python套接字模块实现一个简单的Web代理。在将客户端的HTTP请求转发到服务器之后,我使用以下方法来读取响应:

def _read_response(self):
    response = ''
    while True:
        (readable, _, error) = select.select([self.server], [], [self.server], 3)
        if error:
            break
        if readable:
            data = self.server.recv(BUFSIZE)
            if not data: break
            response += data
    return response

上述代码似乎适用于大多数情况,但。我把这个问题缩小到了这一行:

data = self.server.recv(BUFSIZE)

当不再有任何数据需要接收时(数据==''),此调用最多需要20秒。

读取http响应的正确方法是什么?为什么对recv()的调用需要这么长时间?

1 个答案:

答案 0 :(得分:0)

在阅读正文之前解析内容长度标题。 然后从服务器中只读取 content-length 字节。

您可能希望通过以下方式设置套接字的非阻塞模式:

socket.setblocking(flag)

或在套接字操作上设置超时:

socket.settimeout(value)