如何获取烧瓶中GET请求的内容长度

时间:2017-05-23 20:02:35

标签: flask get request

我试图编写一些首先检查请求大小的包装函数,如果请求大小大于我的预期,特定内容将返回给客户端。我之前尝试使用request.content_length,并且当请求是POST请求时它有效,但不能用于GET请求。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

Flask请求继承自werkzeug请求:http://werkzeug.pocoo.org/docs/0.12/quickstart/#enter-request。因此,Flask中请求的内容长度位于其标题中:flask.request.headers.get('Content-Length')

所以你可以做类似

的事情
import functools


def check_content_length_of_request_decorator(max_content_length):
    def wrapper(fn):
        @functools.wraps(fn)
        def decorated_view(*args, **kwargs):
            if int(flask.request.headers.get('Content-Length') or 0) > max_content_length:
                return flask.abort(400, description='Too much content in request')
            else:
                return fn(*args, **kwargs)
        return decorated_view
    return wrapper


@app.route('/my_route', methods=['GET', 'POST'])
@check_content_length_of_request_decorator(1000)
def my_route():
    return 'This request has a valid content length!'