在定义的 accesses/downloads 次数后关闭 Python 网络服务器
Shut Python webserver down after a defined number of accesses/downloads
我正在尝试找到一种方法,在一定数量的 accesses/downloads 之后关闭 Python 网络服务器。我只是 运行 一个 Python 网络服务器,代码如下:
import http.server, socketserver
port = 8800
handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", port), handler)
httpd.serve_forever()
我想在达到一定数量 downloads/file-accesses 后停止服务。
单个文件访问通常记录为:
192.168.0.1- - [01/Jan/1970 00:00:00] "GET /file.txt HTTP/1.1" 200 -
有没有办法直接解析网络服务器的日志并做出相应的反应?
例如,如果 "GET .* 200 -
的出现次数达到一定数量,则停止服务。
您可以计算请求的数量,并在达到特定数量后退出 http 服务器。这是一个非常基本的示例,它是如何工作的:
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()
我正在尝试找到一种方法,在一定数量的 accesses/downloads 之后关闭 Python 网络服务器。我只是 运行 一个 Python 网络服务器,代码如下:
import http.server, socketserver
port = 8800
handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", port), handler)
httpd.serve_forever()
我想在达到一定数量 downloads/file-accesses 后停止服务。
单个文件访问通常记录为:
192.168.0.1- - [01/Jan/1970 00:00:00] "GET /file.txt HTTP/1.1" 200 -
有没有办法直接解析网络服务器的日志并做出相应的反应?
例如,如果 "GET .* 200 -
的出现次数达到一定数量,则停止服务。
您可以计算请求的数量,并在达到特定数量后退出 http 服务器。这是一个非常基本的示例,它是如何工作的:
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()