我的REST API的消费者说我有时会返回400 Bad Request
- The request sent by the client was syntactically incorrect.
错误。
我的应用程序(Python / Flask)日志似乎没有捕获这个,我的webserver / Nginx也没有记录。
编辑:我想尝试在Flask中导致400错误请求以进行调试。我怎么能这样做?
根据詹姆斯的建议,我添加了类似于以下内容的内容:
@app.route('/badrequest400)
def bad_request():
return abort(400)
当我调用它时,flask返回以下HTML,它不使用“客户端发送的请求在语法上不正确”行:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
(我不确定为什么它不包含<body>
标签。
在我看来,400错误消息有不同的变化。例如,如果我将cookie设置为长度为50,000的值(使用Interceptor with Postman),我将从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个错误的不同变体?
答案 0 :(得分:14)
您可以将状态代码作为return
的第二个参数返回,请参阅下面的示例
@app.route('/my400')
def my400():
code = 400
msg = 'my message'
return msg, code
答案 1 :(得分:6)
为什么不定义一个简单地抛出HTTP / 400错误的URL路由?
from flask import abort
@app.route('/badrequest400)
def bad_request():
return abort(400)
答案 2 :(得分:1)
您也可以将abort
用于自定义消息错误:
from flask import abort
abort(400, 'My custom message')
请参见https://flask-restplus.readthedocs.io/en/stable/errors.html
答案 3 :(得分:1)
此外,您可以使用jsonify
3306