मैं एक साधारण SocketServer.TCPServer
अनुरोध हैंडलर (StreamRequestHandler
) लिख रहा हूं जो हेडर और संदेश निकाय के साथ अनुरोध को कैप्चर करेगा। यह एक HTTP सर्वर को बाहर निकालने के लिए है जिसे हम परीक्षण के लिए उपयोग कर सकते हैं।पायथन टीपीसीएसवरवर rfile.read ब्लॉक
मुझे अनुरोध लाइन या हेडर को पकड़ने में कोई परेशानी नहीं है।
यदि मैं 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) अनुभाग देखें है। –
WITH HTTP विकल्प या तो सामग्री-लंबाई शीर्षलेख (यदि कोई शरीर है) का उपयोग करते हैं, या खंडित स्थानांतरण एन्कोडिंग का उपयोग करते हैं। एक उचित लिखित ग्राहक को यह हेडर भेजना होगा। देखें http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 – Keith
आप SimpleHTTPServer मॉड्यूल का उपयोग क्यों नहीं करते? – Keith