2017-10-25 4 views
0

Ich versuche einen Weg zu finden, einen Python Webserver nach einer bestimmten Anzahl von Zugriffen/Downloads herunterzufahren. Ich habe einfach einen Python-Webserver mit dem folgenden Code ausführen:Python Webserver nach einer definierten Anzahl von Zugriffen/Downloads herunterfahren

import http.server, socketserver 

port = 8800 
handler = http.server.SimpleHTTPRequestHandler 
httpd = socketserver.TCPServer(("", port), handler) 
httpd.serve_forever() 

Ich will dienen, stoppen, nach einer bestimmten Anzahl von Downloads/file-Zugriffe erreicht wurden.

192.168.0.1- - [01/Jan/1970 00:00:00] "GET /file.txt HTTP/1.1" 200 - 

eine Möglichkeit, die Protokolle des Webservers, um direkt zu analysieren Gibt es und entsprechend reagieren:

Einen einzelnen Dateizugriff ist in der Regel als angemeldet?

Wenn beispielsweise eine bestimmte Anzahl von Vorkommen von "GET .* 200 - erreicht wurde, stoppen Sie die Lieferung.

+0

Nun können Sie 'http.server.SimpleHTTPRequestHandler' Unterklasse und die abgeleitete Klasse machen tun, was Sie mit den Anfragen wollen. – ForceBru

+0

Hi @SaAtomic, benötigen Sie _inner-python_ solution? oder könnte es ein externer sein, sagen wir in unixähnlichem Bash-Scripting? –

+0

Sie könnten den Server erweitern, um das zu tun, was Sie wollen. – dcg

Antwort

1

Sie können die Anzahl der Anfragen zählen und den http-Server verlassen, nachdem ein bestimmter Betrag erreicht wurde. Dies ist ein sehr einfaches Beispiel, wie es funktionieren könnte:

import http.server, socketserver 
import sys 

def shutdown(fn): 
    def wrapper(*args, **kw): 
     cls = args[0] 

     if cls.count > 5: 
      print ("shutting down server") 
      sys.exit(0) 
     else: 
      return fn(*args,**kw) 
    return wrapper 


class myHandler(http.server.SimpleHTTPRequestHandler): 
    count = 0 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    @shutdown 
    def do_GET(self, *args, **kwargs): 
     myHandler.count += 1 
     super().do_GET(*args, **kwargs) 

    @shutdown 
    def do_POST(self, *args, **kwargs): 
     self.count += 1 
     super().do_POST(*args, **kwargs) 


port = 8800 
handler = myHandler 
httpd = socketserver.TCPServer(("", port), handler) 
httpd.serve_forever() 
+0

braucht eine Feinabstimmung, da das Herunterfahren gerade nicht funktioniert - aber ich kann das definitiv für mein Projekt verwenden! vielen Dank! – SaAtomic

+0

Die Exit-Funktion funktioniert nicht, da sie einfach eine 'SystemExit'-Ausnahme auslöst und nicht weiß, was damit zu tun ist. – SaAtomic

+0

Das funktioniert gut unter 3.6.2 (Linux) –

Verwandte Themen