我正在编写一个简单的 SocketServer.TCPServer
请求处理程序 (StreamRequestHandler
),它将捕获请求以及 header 和消息正文。这是为了伪造一个我们可以用于测试的 HTTP 服务器。
我可以轻松获取请求行或 header 。
如果我尝试从 rfile
中获取比现有内容更多的内容,代码就会阻塞。如何在不知道其大小的情况下获取所有请求正文?换句话说,我没有 Content-Size
header 。
这是我现在的一个片段:
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
最佳答案
Keith 的评论是正确的。这是它的样子
length = int(self.headers.getheader('content-length'))
data = self.rfile.read(length)
关于Python TPCServer rfile.read block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626427/