我使用 Python 的 socket 模块编写了一个非常基本的轮询代理 Web 服务器。对于代理,我使用套接字的 recv() 函数编写了一个简单的 readline()。
它是这样的:
def readline(socket):
buffer = ''
char = socket.recv(1)
while char != '\n' and char != '':
buffer += char
char = socket.recv(1)
if char == '':
buffer = ''
else:
buffer += '\n'
return buffer
据我了解,如果 recv() 返回一个空字符串,这意味着存在套接字错误或一侧已关闭它们的连接,因此当发生这种情况时,我会向我的代理返回一个空字符串,让它知道 readline() 失败.
运行代理时,我可以访问 youtube.com 和 yahoo.com 等网站,但是每当我尝试访问 www.google.com 时,我的 readline 函数总是在第一个 readline 上返回一个空字符串(读取请求行在 HTTP 请求中)。
有任何想法吗?
编辑: 对不起,我想我不清楚。当在地址栏中输入“ http://www.google.com/ ”时,我正在等待我的 Mozilla Firefox 客户端向我的代理服务器发送的请求,这就是我挂起的地方。我什至没有到达将请求转发到远程服务器并发回响应的部分。