我有一个API_1,我和Postman打电话。如果计算中有错误,将以JSON格式输出错误消息以及状态代码。我使用以下代码:
@app.errorhandler(Exception)
def handle_default_error(e):
message = e.description
return jsonify(error=message), e.code
Postman中的输出如下所示:
这是将返回的正确JSON错误消息。
我的目标是API_Total调用API_1。如果我现在用Postman调用API_Total,然后Postman调用API_1,并且在计算中出现错误,JSON错误消息通常应该从API_1传递到API_Total,然后由API_Total输出。但是,我得到以下输出:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code: 400</p>
<p>Message: Bad Request.</p>
<p>Error code explanation: 400 - Bad request syntax or unsupported method.</p>
</body>
但我不希望JSON错误消息被HTML错误消息取代。
return jsonify(error=message), e.code, {'Content-Type': 'application/json'}
不幸的是,这并没有改变任何东西,仍然没有JSON错误消息。
#Simplified procedure
#1. Postman calls API_Total
@app.route('/api/API_Total', methods=['GET'])
#2. API_1 is called by API_Total
@app.route('/api/API_1', methods=['GET'])
....
try:
response = requests.request("GET", url, headers=headers_content, data=payload_content, proxies=proxies)
except:
return None
#3. API_1
#Performing the calculations
#If an error occurs:
return abort(404, 'Bad Request')
#app.errorhandler is called
@app.errorhandler(Exception)
def handle_default_error(e):
message = e.description
#Return to API_Total
return jsonify(error=message), e.code
#4 When an error occurs, API_Total displays it as HTML rather than JSON unless I set the Status Code to 200.
这就是我的问题(#3)。如果我使用jsonify返回它,并且没有将状态码设置为200,则错误消息将以HTML形式输出。但是如果我使用return jsonify并将状态码设置为200,则错误消息将正确输出为JSON。但是我使用abort得到错误消息和状态代码。我也想正确返回状态码,而不是默认设置为200。
2条答案
按热度按时间yqkkidmi1#
也许这样的东西会为你工作:
o0lyfsai2#
我的意思是这样的东西,人们可以复制和粘贴测试(例子从ChatGPT,而不是实际的代码或答案):
更新:
我已经更新了代码,使用请求调用API_1,这似乎工作正常。
http://127.0.0.1:5000/API_1返回
http://127.0.0.1:5000/API_Total返回