经过一定数量的访问/下载后,关闭Python Web服务器

时间:2017-10-25 14:14:34

标签: python python-3.x web-services webserver limit

我正试图找到一种方法,在一定数量的访问/下载后关闭Python网络服务器。我只是使用以下代码运行Python webserver:

import http.server, socketserver

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

我想在达到一定数量的下载/文件访问后停止提供服务。

单个文件访问通常记录为:

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

有没有办法直接解析网络服务器的日志并作出相应的反应?

例如,如果已达到"GET .* 200 -的特定次数,则停止投放。

1 个答案:

答案 0 :(得分:1)

您可以计算请求数,并在达到特定金额后退出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()