我们正在创建一个小项目,其中我们将flask 作为前端和基于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)
(...)
基于 Flask 的网站正在大喊:
ValueError: No JSON object could be decoded
我们不知道如何协调烧瓶和restlet之间的通信。
编辑(格林威治标准时间 22-04 晚上 10:08):我发现回复是:
<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:26):我仍然不确定为什么,但我认为它可能是 JSON 格式的东西。在更正我的代码以便它发送正确的 JSON(说 JSONLint)之后,我仍然收到相同的消息。有人知道如何在 Python 中创建 JSONObject 吗?WebService 有方法:
@Post("json")
public JSONObject verifyAccount(JSONObject dane){
编辑(格林威治标准时间 23-04 下午 7:26):好的。所以我们几乎可以肯定这是不可见标题的问题。任何人都可以确认这里在 python 代码中创建的标头是正确的吗?
编辑(格林威治标准时间 24-04 下午 5:40):问题仍然存在。正如其他一些建议,我将请求更改回 urllib2。这有助于解决第一件事——“价值问题”。现在浏览器有
urllib2.HTTPError
HTTPError: HTTP Error 415: Unsupported Media Type
现在发布请求:
@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()
编辑(格林威治标准时间 24-04 下午 6:20):
Wireshark 捕获了 POST 请求,看起来没问题。