web-dev-qa-db-fra.com

Envoyer la requête JSON à Flask via Curl

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?

16
OhMad

Selon le get_json documents:

La fonction [..] renverra None si le type MIME n'est pas application/json mais cela peut être remplacé par le paramètre force.

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'
14
randomir