flaskのような非常に単純なポストルートをセットアップします。
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()
これは、コマンドラインから送信しようとしているcurlリクエストです。
curl localhost:5000/post -d '{"foo": "bar"}'
それでも、「Data Received: "None"」と出力されます。したがって、渡されたJSONを認識しません。
この場合、json形式を指定する必要がありますか?
get_json
ドキュメントによると:
[..] mimetypeが
application/json
でない場合、関数はNone
を返しますが、これはforce
パラメーターによってオーバーライドできます。
したがって、着信要求のmimetypeをapplication/json
に指定します。
curl localhost:5000/post -d '{"foo": "bar"}' -H 'Content-Type: application/json'
またはforce=True
を使用してJSONデコードを強制する:
data = request.get_json(force=True)
Windowsでこれを実行する場合(PowerShellではなくcmd.exe
)、JSONデータの引用を単一から変更する必要もあります。二重引用符への引用:
curl localhost:5000/post -d "{\"foo\": \"bar\"}" -H 'Content-Type: application/json'