如何在Flask中获取GET请求的内容长度

4

我正在尝试编写一些包装函数,该函数将首先检查请求的大小,如果请求的大小大于我的预期,则会向客户端返回特定内容。我之前尝试使用request.content_length,当请求是POST请求时可以工作,但无法用于GET请求。有没有办法解决这个问题?


你正在使用哪个版本的Python、Flask和Werkzeug?你正在使用什么来发送GET请求中的数据? - Aaron
1个回答

7
一个 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!'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接