问题描述
使用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()