Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send JSON-Request to Flask via Curl [duplicate]

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?

like image 935
OhMad Avatar asked Oct 31 '17 10:10

OhMad


1 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'
like image 137
randomir Avatar answered Oct 29 '22 17:10

randomir