私たちは、Flask を FrontEnd および Restlet ベースの WebService として持つ小さなプロジェクトを作成しています。
ログインデータを JSON としてフラスコから restlet に送信しようとします。
def login():
error = None
if request.method == 'POST':
payload = {'username' : request.form['username'], 'password' : request.form['password']}
headers = {'Content-Type': 'application/json'}
req = requests.post(WEBSERVICE_IP + '/login', data=json.dumps(payload), headers=headers)
(...)
フラスコベースのウェブサイトは次のことを叫んでいます:
ValueError: No JSON object could be decoded
フラスコとレストレットの間の通信を調整する方法がわかりません。
編集 (22-04 10:08pm GMT) : 応答が次のとおりであることがわかりました。
<html>
(...)
Unsupported Media Type
The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method
(...)
</html>
編集 (22-04 11:26pm GMT) : 理由はまだわかりませんが、JSON 形式のものではないかと思いました。正しい JSON (JSONLint) を送信するようにコードを修正した後も、同じメッセージが表示されます。Python で JSONObject を作成する方法を知っている人はいますか? WebService にはメソッドがあります:
@Post("json")
public JSONObject verifyAccount(JSONObject dane){
編集 (2004 年 23 月 4 日午後 7 時 26 分 GMT) : わかりました。したがって、見えないヘッダーに問題があることはほぼ確実です。ここのPythonコードでのヘッダーの作成が正しいことを誰でも確認できますか?
編集 (24-04 5:40pm GMT) : 問題はまだ実際にあります。他の人が示唆したように、リクエストをurllib2に戻しました。これは、最初の「価値の問題」に役立ちました。現在、ブラウザは持っています
urllib2.HTTPError
HTTPError: HTTP Error 415: Unsupported Media Type
今すぐ POST リクエスト:
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
payload = {"Login": request.form['username'],
"Haslo": request.form['haslo']}
data = json.dumps(payload)
clen = len(data)
req = urllib2.Request(WEBSERVICE_IP + '/login', data,
{'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()
f.close()
編集 (2004 年 2 月 24 日午後 6 時 20 分 GMT) :
Wireshark が POST 要求をキャプチャし、問題ないように見えます。