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?
According to the get_json
docs:
[..] function will return
None
if the mimetype is notapplication/json
but this can be overridden by theforce
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With