この記事は?
通常、Flask において受け取ったデータの取得にはrequest
を用います。
公式ドキュメントを見ても良いのですが、メソッドが多くて目的のものがすんなり見つからないことも多々。
そこで、自分が主に使用するメソッドをメモ。
公式ドキュメントはこちら。
API — Flask Documentation (1.1.x)
動作確認方法
flask-app.py
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST"])
def rt_recv():
request.<any_method> # 本記事ではこの行のみ記述
return ""
app.run(host="0.0.0.0", port=8080, debug=True)
http-post.sh
#!/bin/sh
curl "http://localhost:8080" \
-H "Content-Type: text/plain" \
-d "<body>"
HTTP リクエストを送る方法は自由ですが、curl
コマンドが手軽ではないかなと思います。
ヘッダ
全ヘッダを表示/取得
# 単に表示させる
print(request.headers)
# 辞書型で取得する
dict(request.headers)
特定のヘッダを取得
# get メソッドで取得
request.headers.get("<Key>")
# 辞書型的に書いてのヘッダ取得も可能
request.headers["<Key>"]
## ただし get() とは違い、存在しないキーの場合エラーとなる
get()
メソッドを用いた場合、指定したキーのヘッダが存在しない場合は None オブジェクトが返されます。
一方、辞書型の記述での取得の場合、存在しないキーを指定するとキーエラーとなります。
ボディ
ボディを単に文字列として取得
request.get_data()
単にstring
型としてボディを取得します。
JSON 形式の取得 (全てを辞書型で取得)
# いずれでも可
request.get_json()
request.json
Content-Type
ヘッダがapplication/json
以外であった場合、None オブジェクトが返されます。
Form 形式の取得
全てを辞書型で取得
# いずれでも可
request.form.to_dict()
dict(request.form)
Content-Type
ヘッダがapplication/x-www-form-urlencoded
以外であった場合、空の辞書型オブジェクトが返されます。
特定のキーを取得
# get メソッドで取得
request.form.get("<Key>")
# 辞書型的に書いてのヘッダ取得も可能
request.form["<Key>"]
## ただし get() とは違い、存在しないキーの場合エラーとなる
(headers
と同様。)
URL パラメータの取得
全てを辞書型で取得
# いずれでも可
request.args.to_dict()
dict(request.args)
(form
とほぼ同様。URL パラメータは、リクエストヘッダとかは関係無し。)
特定のキーを取得
# get メソッドで取得
request.args.get("<Key>")
# 辞書型的に書いてのヘッダ取得も可能
request.args["<Key>"]
## ただし get() とは違い、存在しないキーの場合エラーとなる
(headers
と同様。)