5
我正在寫一個簡單的SocketServer.TCPServer
請求處理程序(StreamRequestHandler
),它將捕獲請求以及標頭和消息主體。這是爲了僞造一個我們可以用來測試的HTTP服務器。Python TPCServer rfile.read blocks
我沒有麻煩抓住請求行或標題。
如果我試圖從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
請參閱關於[非阻塞套接字](http://docs.python.org/howto/sockets.html#non-blocking-sockets)一節。 –
通過使用HTTP,可以使用Content-Length頭部(如果存在主體)或使用分塊傳輸編碼。一個寫得很好的客戶端必須發送這個頭文件。請參閱http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 – Keith
爲什麼不使用SimpleHTTPServer模塊? – Keith