在请求数x之后限制用户访问服务

问题描述

使用Flask,可以制作python模块来侦听用户到服务器的请求并计数请求。一段时间后,如果有任何用户发出例如30万个请求,我想限制对他们正在使用的服务的访问。

关于服务。 我们的客户使用标准的 OGC(WMS,WFS)服务来访问我们的空间数据。他们通过我们提供服务时提供的URL访问数据。一种服务在一个端口上运行。我们在一台服务器上的多个端口上运行着多种服务。

获取请求从客户端发送到服务器时,我要首先请求到flask应用程序并检查用户发出的请求数。如果请求数量小于指定数量,则应用程序应继续传递请求;但如果请求数量大于指定数量,则应用程序应限制对该用户的数据访问。

我愿意听到其他使该想法可行的技术,但是python更可取。

解决方法

烧瓶中有一个扩展称为烧瓶限制器。此扩展允许您限制特定路由上的请求数量。每个路由可以有不同的请求限制,也可以不受限制。它通过跟踪用户的IP地址来限制用户。

请参阅此文档:https://flask-limiter.readthedocs.io/en/stable/

示例代码:

from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
    app,key_func=get_remote_address,# get users IP address.
    default_limits=["300000 per month"],# default limit to 300K request per month
)

@app.route("/spatial-data")
@limiter.limit("300000 per month")
def slow():
    return "720"

app.run()