簡體   English   中英

Flask POST 請求導致服務器崩潰

[英]Flask POST request is causing server to crash

我正在嘗試在 Flask 中制作一個簡單的 api,第一步是獲取 POST json 數據。 (我現在只想打印它)這是我的代碼,當我使用 json 數據請求 /api 時,它返回 500 錯誤。 關於為什么會發生這種情況的任何想法?

from flask import Flask, request, Response
app = Flask(__name__)

@app.route('/')
def root_response():
    return "Hello World."

@app.route('/api', methods=['POST', 'GET'])
def api_response():
    if request.method == 'POST':
        return request.json

if __name__ == '__main__':
    app.run()

卷曲命令:

$ curl -H "Content-Type: application/json" --data @body.json http://127.0.0.1:5000/api
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

身體.json:

{
"please": "print",
"me": "now"
}

首先你要做的是啟用調試模式,這樣 Flask 就會告訴你錯誤是什么。 (每次修改代碼時,您都會獲得重新加載燒瓶的額外好處!)

if __name__ == '__main__':
    app.debug = True
    app.run()

然后我們發現我們的錯誤:

TypeError: 'dict' object is not callable

您正在返回 request.json,它是一個字典。 您需要先將其轉換為字符串。 這很容易做到:

def api_response():
    from flask import jsonify
    if request.method == 'POST':
        return jsonify(**request.json)

你在這! :)

服務器過載是因為默認端口(5000)或用戶明確提到的端口(例如:app.run(port=7000))可能正在后台使用其他一些進程,所以我們需要殺死正在運行的進程由該端口使用。

您可以使用以下命令查看正在使用該端口的進程 ID(PIDS): netstat -o -a in command prompt 在此處輸入圖像描述 *查看端口的相應 PID

然后使用以下命令殺死您要使用的端口的所有進程(PIDS): Taskkill /PID 30832 /F在這里,我將 PID 30832 用於端口 127.0.0.1:7000,這會導致過載錯誤。 在那個問題解決之后。

服務器在您使用的端口上過載。 如果你有一個 linux 服務器,打印綁定到你的端口的進程,如下所示:

fuser 5000/tcp

這將殺死綁定到它的進程:

fuser -k 5000/tcp

你可以走了

1.首先你設置:

if __name__ == '__main__':
app.run(debug=TRUE)

2.服務器(默認)忙於進程,首先你終止該服務器上的進程:

您可以使用以下命令查看正在使用該端口的進程 ID(PIDS): netstat -o -a in command prompt。 在此處輸入以查看示例查看端口的相應 PID。

然后使用以下命令殺死您要使用的端口的所有進程(PIDS): Taskkill /PID 10324 /F在這里,我將PID 10324用於端口 127.0.0.1:5000 ,這會導致過載錯誤。 那個問題解決之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM