クライアントコード:
import requests
import json
url = 'http://127.0.0.1:5050/login'
user = "newUser"
password = "password"
headers = {'content-type': 'application/json'}
response = requests.post(url, data={"user": user,"pass": password}, headers = headers)
サーバーコード:
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/login', methods=['GET','POST'])
def login():
if request.method == 'POST':
username = request.form.get("user")
password = request.form.get("pass")
//more code
return make_response("",200)
if __name__ == "__main__":
app.run(Host = "127.0.0.1", port = 5050)
問題は、ユーザー名とパスワードが常にNoneであるということです。
私も使ってみました:
content = request.get_json(force = True)
password = content['pass']
そして
request.form['user']
私が持っているコンテンツを印刷すると:<Request ' http://127.0.0.1:5050/login ' [POST]>なので、クライアントから送信されたjsonが見つかりません。
編集:
私はjson.dumpsを追加し、request.get_json()を使用しました、そしてそれはうまくいきました
JSONではなく、フォームでエンコードされたデータを送信しています。 content-typeを設定するだけでは、リクエストはJSONにはなりません。使用する json=
JSONデータを送信します。
response = requests.post(url, json={"user": user,"pass": password})
Flask内のデータを取得するには:
data = request.get_json()
私の最初の推測では、リクエストでContent-Typeヘッダーを設定していないので、Flaskはデータを解析できる必要があることを理解していません。Content-Typeヘッダーを値application/json
を確認し、必要な場所に到達できるかどうかを確認します。
もう1つの注意点は、ログインページにアクセスすると、ブラウザがContent-Typeヘッダーをapplication/x-www-form-urlencoded
に設定し、データをuser=asdf&passwd=asdf
としてエンコードすることです。