如何在Python/Flask中故意导致400错误请求?

如何在Python/Flask中故意导致400错误请求?,python,rest,nginx,postman,http-status-code-400,Python,Rest,Nginx,Postman,Http Status Code 400,我的REST API的使用者说,有时我返回一个400错误请求-客户端发送的请求在语法上不正确。错误 我的应用程序(Python/Flask)日志似乎没有捕捉到这一点,我的Web服务器/Nginx日志也没有 编辑:出于调试目的,我想尝试在Flask中引起400个错误请求。我该怎么做 根据James的建议,我添加了类似于以下内容的内容: @app.route('/badrequest400') def bad_request(): return abort(400) 当我调用此函数时,fl

我的REST API的使用者说,有时我返回一个
400错误请求
-
客户端发送的请求在语法上不正确。
错误

我的应用程序(Python/Flask)日志似乎没有捕捉到这一点,我的Web服务器/Nginx日志也没有

编辑:出于调试目的,我想尝试在Flask中引起400个错误请求。我该怎么做

根据James的建议,我添加了类似于以下内容的内容:

@app.route('/badrequest400')
def bad_request():
    return abort(400)
当我调用此函数时,flask返回以下HTML,它不使用“客户端发送的请求在语法上不正确”行:


400错误请求
错误的请求
浏览器(或代理)发送了此服务器无法理解的请求

(我不知道为什么它没有包含
标记

在我看来,400错误消息有不同的变体。例如,如果我将cookie的长度设置为50000(使用带邮递员的拦截器),我将从Flask获得以下错误:

<html>
<head>
    <title>Bad Request</title>
</head>
<body>
    <h1>
        <p>Bad Request</p>
    </h1>
Error parsing headers: 'limit request headers fields size'

</body>
</html>

错误的请求
错误的请求

分析标头时出错:“限制请求标头字段大小”

有没有办法让Flask通过400个错误的不同变体?

您可以使用
abort
通过状态代码引发HTTP错误

from flask import abort
@app.route('/badrequest400')
def bad_request():
    abort(400)

您可以将状态代码作为返回的第二个参数返回,请参见下面的示例

@app.route('/my400')
def my400():
    code = 400
    msg = 'my message'
    return msg, code

您还可以对自定义消息错误使用
abort

from flask import abort
abort(400, 'My custom message')

请参见

另外,您可以使用jsonify

from flask import jsonify

class SomeView(MethodView):
    def post(self, *args, **kwargs):
        if "csv_file" not in request.files:
            return jsonify({'errors': 'No csv_file key in request.files.'}), 400

嗨,詹姆斯,谢谢你的想法。但是,当我这样做时,Flask默认情况下会在400个错误请求下返回以下描述:
浏览器(或代理)发送了一个此服务器无法理解的请求。
。看起来有不同类型的400条错误消息——例如,如果我创建了一个包含50000个字符的add cookie,它将以400个字符失败,但描述中说这是一个无效的头。您知道如何触发“语法错误”吗400版本?嘿,詹姆斯,你对我的评论和更新的问题有什么想法吗?希望我也能返回带有状态代码的自定义消息。还值得注意的是,状态模块包含标准HTTP状态。
来自flask\u api导入状态
,然后简单地
状态。HTTP\u 200\u OK
from flask import jsonify

class SomeView(MethodView):
    def post(self, *args, **kwargs):
        if "csv_file" not in request.files:
            return jsonify({'errors': 'No csv_file key in request.files.'}), 400