Send JSON-Request to Flask via Curl

Question:

I setup a very simple post route in flask like this:

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()

This is the curl request I am trying to send from the command-line:

curl localhost:5000/post -d '{"foo": "bar"}'

But still, it prints out ‘Data Received: “None”‘. So, it doesn’t recognize the JSON I passed it.

Is it necessary to specify the json format in this case?

Asked By: OhMad

||

Answers:

According to the get_json docs:

[..] function will return None if the mimetype is not application/json but this can be overridden by the force parameter.

So, either specify the mimetype of the incoming request to be application/json:

curl localhost:5000/post -d '{"foo": "bar"}' -H 'Content-Type: application/json'

or force JSON decoding with force=True:

data = request.get_json(force=True)

If running this on Windows (cmd.exe, not PowerShell), you’ll also need to change the quoting of your JSON data, from single quotes to double quotes:

curl localhost:5000/post -d "{"foo": "bar"}" -H 'Content-Type: application/json'
Answered By: randomir
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.