0

我正在使用 python 套接字模块实现一个简单的网络代理。将客户端的 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)

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

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

4

1 回答 1

0

在读取正文之前解析内容长度标头。然后从服务器只读取内容长度字节。

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

socket.setblocking(flag)

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

socket.settimeout(value)
于 2012-09-03T14:49:53.410 回答