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):
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
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
- import os
- import random
- import logging
- import BaseHTTPServer
- import cgi
- import urlparse
- import sqlite3
- import base64
- import xml.dom.minidom as minidom
- address = ("0.0.0.0", 8001)
- class StorageServer(object):
- def start(self):
- httpd = StorageHTTPServer((address[0], address[1]), StorageHTTPServerHandler)
- logger.log(logging.INFO, "Server started on %s:%d...", address[0], address[1])
- httpd.serve_forever()
- class StorageHTTPServer(BaseHTTPServer.HTTPServer):
- def __init__(self, server_address, RequestHandlerClass):
- BaseHTTPServer.HTTPServer.__init__(self, server_address, RequestHandlerClass)
- class StorageHTTPServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- def do_POST(self):
- if self.path == "/ssServer/sServer.asmx":
- length = int(self.headers['content-length'])
- action = self.headers['SOAPAction']
- post = self.rfile.read(length)
- action2 = os.path.basename(action)[:-1]
- shortaction = action[action.rfind('/')+1:-1]
- 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>'
- dom = minidom.parseString(post)
- data = dom.getElementsByTagName('SOAP-ENV:Body')[0].getElementsByTagName('ns1:' + shortaction)[0]
- gameid = str(int(data.getElementsByTagName('ns1:gameid')[0].firstChild.data))
- tableid = data.getElementsByTagName('ns1:tableid')[0].firstChild.data
- loginticket = data.getElementsByTagName('ns1:loginTicket')[0].firstChild.data
- ret += '<' + shortaction + 'Response xmlns="http://xxxxxxx.net/s">'
- ret += '<' + shortaction + 'Result>Success</' + shortaction + 'Result>'
- # Hier käme dann noch jede Menge "Datenbank"-Kram.
- ret += '</' + shortaction + 'Response>'
- ret += '</soap:Body></soap:Envelope>'
- self.send_response(200)
- self.send_header('Content-Type', 'text/xml; charset=utf-8')
- self.end_headers()
- #logger.log(logging.DEBUG, "%s response to %s", action, self.client_address)
- self.wfile.write(ret)
- def do_GET(self):
- self.send_response(302)
- self.send_header('Location', 'http://google.de')
- self.end_headers()
- logger.log(logging.INFO, "Got GET request %s from %s", self.path, self.client_address)
- logger.log(logging.INFO, "Forwarded to google")
- if __name__ == "__main__":
- storage_server = StorageServer()
- 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“ ()