Base HTTP Server crasht ständig

  • Python

    Base HTTP Server crasht ständig

    Hallo zusammen,

    ich habe mir in Python mit dem "BaseHTTPServer" einen kleinen HTTP-Server zusammengebaut, der auf bestimmte Anfragen reagieren soll (mit Daten aus einer Datenbank).

    Hier ist mein Code (etwas gekürzt):

    Python-Quellcode

    1. import os
    2. import random
    3. import logging
    4. import BaseHTTPServer
    5. import cgi
    6. import urlparse
    7. import sqlite3
    8. import base64
    9. import xml.dom.minidom as minidom
    10. address = ("0.0.0.0", 8001)
    11. class StorageServer(object):
    12. def start(self):
    13. httpd = StorageHTTPServer((address[0], address[1]), StorageHTTPServerHandler)
    14. logger.log(logging.INFO, "Server started on %s:%d...", address[0], address[1])
    15. httpd.serve_forever()
    16. class StorageHTTPServer(BaseHTTPServer.HTTPServer):
    17. def __init__(self, server_address, RequestHandlerClass):
    18. BaseHTTPServer.HTTPServer.__init__(self, server_address, RequestHandlerClass)
    19. class StorageHTTPServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    20. def do_POST(self):
    21. if self.path == "/ssServer/sServer.asmx":
    22. length = int(self.headers['content-length'])
    23. action = self.headers['SOAPAction']
    24. post = self.rfile.read(length)
    25. action2 = os.path.basename(action)[:-1]
    26. shortaction = action[action.rfind('/')+1:-1]
    27. ret = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>'
    28. dom = minidom.parseString(post)
    29. data = dom.getElementsByTagName('SOAP-ENV:Body')[0].getElementsByTagName('ns1:' + shortaction)[0]
    30. gameid = str(int(data.getElementsByTagName('ns1:gameid')[0].firstChild.data))
    31. tableid = data.getElementsByTagName('ns1:tableid')[0].firstChild.data
    32. loginticket = data.getElementsByTagName('ns1:loginTicket')[0].firstChild.data
    33. ret += '<' + shortaction + 'Response xmlns="http://xxxxxxx.net/s">'
    34. ret += '<' + shortaction + 'Result>Success</' + shortaction + 'Result>'
    35. # Hier käme dann noch jede Menge "Datenbank"-Kram.
    36. ret += '</' + shortaction + 'Response>'
    37. ret += '</soap:Body></soap:Envelope>'
    38. self.send_response(200)
    39. self.send_header('Content-Type', 'text/xml; charset=utf-8')
    40. self.end_headers()
    41. #logger.log(logging.DEBUG, "%s response to %s", action, self.client_address)
    42. self.wfile.write(ret)
    43. def do_GET(self):
    44. self.send_response(302)
    45. self.send_header('Location', 'http://google.de')
    46. self.end_headers()
    47. logger.log(logging.INFO, "Got GET request %s from %s", self.path, self.client_address)
    48. logger.log(logging.INFO, "Forwarded to google")
    49. if __name__ == "__main__":
    50. storage_server = StorageServer()
    51. storage_server.start()



    Leider stürzt der Server ca. alle halbe Stunde ab. Bedeutet, das Terminal zeigt noch ganz normal die letzte Ausgabe des Scripts, aber eingehende neue Anfragen werden nicht beantwortet.

    Ist da irgendein Fehler im Code, kann ich da irgendwas dran ändern?
    Oder muss ich ein zweites Script schreiben, welches alle 2 Minuten selbst eine Anfrage an den Server schickt und ihn neustartet, falls er nicht antwortet?

    Leseratte

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Leseratte“ ()