J'ai configuré un itinéraire de publication très simple dans flask comme ceci:
from flask import Flask, request
app = Flask(__name__)
@app.route('/post', methods=['POST'])
def post_route():
if request.method == 'POST':
data = request.get_json()
print('Data Received: "{data}"'.format(data=data))
return "Request Processed.\n"
app.run()
Voici la demande curl que j'essaie d'envoyer depuis la ligne de commande:
curl localhost:5000/post -d '{"foo": "bar"}'
Mais tout de même, il affiche "Données reçues:" Aucune "". Donc, il ne reconnaît pas le JSON que je lui ai transmis.
Est-il nécessaire de spécifier le format json dans ce cas?
Selon le get_json
documents:
La fonction [..] renverra
None
si le type MIME n'est pasapplication/json
mais cela peut être remplacé par le paramètreforce
.
Donc, spécifiez le type de mime de la demande entrante comme application/json
:
curl localhost:5000/post -d '{"foo": "bar"}' -H 'Content-Type: application/json'
ou forcer le décodage JSON avec force=True
:
data = request.get_json(force=True)
Si l'exécute sous Windows (cmd.exe
, pas PowerShell), vous devrez également modifier la citation de vos données JSON, des guillemets simples aux guillemets doubles:
curl localhost:5000/post -d "{\"foo\": \"bar\"}" -H 'Content-Type: application/json'