如何在使用 flask_limiter 的烧瓶中根据请求 header 设置限制?
How to set limit on request header in flask use with flask_limiter?
我可以在 flask 中对 http 请求 header 设置限制吗?
我的请求 header 存储在 redis 中,并且在 redis 中为每个请求添加一个。
例如:
一个 : 3
拖 : 5
...
一个,两个……是我的要求 header by key= CLIENT-KEY.
app = Flask(__name__)
limiter = Limiter(
app,
key_func=get_remote_address,
default_limits=["200 per day", "50 per hour"]
)
redis_cache = redis.Redis(host='127.0.0.1', port=6379, db=0,
password='redis', charset="utf-8", decode_responses=True)
number = 0
@app.route('/', methods=['POST'])
@limiter.limit("1 per minute", key_func=get_remote_address)
def api_message():
try:
target = request.headers['CLIENT-KEY']
global number
if redis_cache.__contains__(target):
a = int(redis_cache.get(target))
redis_cache.set(target, a + 1)
return redis_cache.get(target)
else:
number = 0
number += 1
redis_cache.set(target, number)
return redis_cache.get(target)
except:
my_key_list = redis_cache.keys()
return redis_cache.get(target)
现在如何限制请求HEADER?
例如:
每个CLIENT-KEY每分钟只能请求10个
看来你需要一些动态限制。您可以像下面这样访问您的请求 headers:
from flask import request
request.headers.get('your-header-name')
这个link可能对如何定义一些动态限制有帮助。
我解决了问题
from flask import Flask, request, make_response
from flask import jsonify
from flask_limiter import Limiter
def get_client_key():
return request.headers.get('CLIENT-KEY')
app = Flask(__name__)
limiter = Limiter(app, key_func=get_client_key)
@app.errorhandler(429)
def ratelimit_handler(e):
return make_response(
jsonify(
{"message": f"Too many request from {request.headers.get('CLIENT-KEY')}"}), 429
)
@app.route('/', methods=['POST'])
@limiter.limit('10/minute')
这篇link可能对您有所帮助。这是我的 github 仓库。
我可以在 flask 中对 http 请求 header 设置限制吗?
我的请求 header 存储在 redis 中,并且在 redis 中为每个请求添加一个。 例如:
一个 : 3
拖 : 5
...
一个,两个……是我的要求 header by key= CLIENT-KEY.
app = Flask(__name__)
limiter = Limiter(
app,
key_func=get_remote_address,
default_limits=["200 per day", "50 per hour"]
)
redis_cache = redis.Redis(host='127.0.0.1', port=6379, db=0,
password='redis', charset="utf-8", decode_responses=True)
number = 0
@app.route('/', methods=['POST'])
@limiter.limit("1 per minute", key_func=get_remote_address)
def api_message():
try:
target = request.headers['CLIENT-KEY']
global number
if redis_cache.__contains__(target):
a = int(redis_cache.get(target))
redis_cache.set(target, a + 1)
return redis_cache.get(target)
else:
number = 0
number += 1
redis_cache.set(target, number)
return redis_cache.get(target)
except:
my_key_list = redis_cache.keys()
return redis_cache.get(target)
现在如何限制请求HEADER?
例如: 每个CLIENT-KEY每分钟只能请求10个
看来你需要一些动态限制。您可以像下面这样访问您的请求 headers:
from flask import request
request.headers.get('your-header-name')
这个link可能对如何定义一些动态限制有帮助。
我解决了问题
from flask import Flask, request, make_response
from flask import jsonify
from flask_limiter import Limiter
def get_client_key():
return request.headers.get('CLIENT-KEY')
app = Flask(__name__)
limiter = Limiter(app, key_func=get_client_key)
@app.errorhandler(429)
def ratelimit_handler(e):
return make_response(
jsonify(
{"message": f"Too many request from {request.headers.get('CLIENT-KEY')}"}), 429
)
@app.route('/', methods=['POST'])
@limiter.limit('10/minute')
这篇link可能对您有所帮助。这是我的 github 仓库。