9

我正在编写一个简单的SocketServer.TCPServer请求处理程序 ( StreamRequestHandler),它将捕获请求以及标头和消息正文。这是为了伪造一个我们可以用于测试的 HTTP 服务器。

我可以毫不费力地抓住请求行或标题。

如果我试图从现有的东西中获取更多rfile,代码块。如何在不知道其大小的情况下获取所有请求正文?换句话说,我没有Content-Size标题。

这是我现在拥有的一个片段:

def _read_request_line(self):
    server.request_line = self.rfile.readline().rstrip('\r\n')

def _read_headers(self):
    headers = []
    for line in self.rfile:
        line = line.rstrip('\r\n')
        if not line:
            break
        parts = line.split(':', 1)
        header = (parts[0].strip(), parts[0].strip())
        headers.append(header)
    server.request_headers = headers

def _read_content(self):
    server.request_content = self.rfile.read()  # blocks
4

1 回答 1

8

基思的评论是正确的。这是它的样子

     length = int(self.headers.getheader('content-length'))
     data = self.rfile.read(length)
于 2013-11-21T21:09:32.040 回答