Demande POST Flask provoque le blocage du serveur
Je suis en train de faire une api simple dans le Flacon, la première étape étant d'obtenir le POSTE de données json. (Je tiens juste à l'imprimer pour l'instant) C'est mon code et quand je demande /api avec les données json, il renvoie une erreur 500. Toute réflexion sur le pourquoi de ce qui se passe?
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()
La commande curl:
$ 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>
corps.json:
{
"please": "print",
"me": "now"
}
source d'informationauteur zallarak
Vous devez vous connecter pour publier un commentaire.
D'abord ce que vous voulez faire est d'activer le mode debug afin Flacon sera effectivement vous dire quelle est l'erreur. (Et vous obtenez l'avantage supplémentaire de la fiole de rechargement à chaque fois que vous modifiez votre code!)
Puis nous savoir nos erreurs:
Vous êtes à la demande de retour.json, qui est un dictionnaire. Vous devez le convertir en une chaîne de caractères en premier. C'est assez facile à faire:
Vous y êtes! 🙂
Le serveur est surchargé car le port par défaut(5000) ou le port mentionné explicitement par l'utilisateur(par exemple:application.exécuter(port=7000)) peut-être l'aide d'un autre processus en arrière-plan, de sorte que nous avons besoin de tuer les processus qui sont utilisés par ce port.
Vous pouvez voir l'id de processus(PID) qui sont à l'aide de ce port à l'aide de la commande suivante:
netstat -o-a dans l'invite de commande
*Rechercher dans les PID pour le port
Puis tuer tous les Processus(PID) pour le port que vous souhaitez utiliser à l'aide de la commande suivante:
Taskkill /PID 30832 /F
Ici, j'ai utilisé le PID 30832 pour 127.0.0.1 port:7000 qui donne de la surcharge d'erreur.
Après que le problème est résolu.