ich einen einfachen HTTP-Server geschrieben haben, zu POST-Anfragen bearbeiten:HTTP-Server hängt, während Pakete akzeptieren
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_POST(self):
ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
postvars = {}
try:
if ctype == 'application/x-www-form-urlencoded':
length = int(self.headers.getheader('content-length'))
postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
self.send_response(200)
self.send_header("Content-type", "text")
self.send_header("Content-length", str(len(body)))
self.end_headers()
self.wfile.write(body)
except:
print "Error"
def httpd(handler_class=MyHandler, server_address = ('2.3.4.5', 80)):
try:
print "Server started"
srvr = BaseHTTPServer.HTTPServer(server_address, handler_class)
srvr.serve_forever() # serve_forever
except KeyboardInterrupt:
server.socket.close()
if __name__ == "__main__":
httpd()
Der Server läuft gut, aber manchmal ist es gerade hängt. Wenn ich drücke CTRL +C es gibt die folgenden Fehler und setzt dann den Empfang von Daten:
Exception happened during processing of request from ('1.1.1.2', 50928)
Traceback (most recent call last):
File "/usr/lib/python2.6/SocketServer.py", line 281, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.6/SocketServer.py", line 307, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.6/SocketServer.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.6/SocketServer.py", line 615, in __init__
self.handle()
File "/usr/lib/python2.6/BaseHTTPServer.py", line 329, in handle
self.handle_one_request()
File "/usr/lib/python2.6/BaseHTTPServer.py", line 312, in handle_one_request
self.raw_requestline = self.rfile.readline()
File "/usr/lib/python2.6/socket.py", line 406, in readline
data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
Kann mir jemand sagen, wie dies zu korrigieren? Ich kann die Fehler nicht verstehen.
Ist das wirklich der Code, den Sie ausführen? Das baumelnde 'except:' sieht wie ein Syntaxfehler aus. – alberge
Ich habe die Aussage beim Kopieren verpasst. Das tut mir leid. – Bruce
Sind Sie sicher, dass der Client das Problem nicht verursacht (z. B. durch Verbinden und Senden von nichts oder einer unbegrenzten Datenmenge)? – katzenversteher