This is what i get
b'{"data": "https://files.slack.com/files-pri/T03HPFD2P-F2RU2S4R0/scher7-om-14.52.47.png"}'
when i print my request data from a flask POST web service.
print(request.data)
But when i do url = request.form.get('data', None)
I get value of url
variable None
Why?
答案 0 :(得分:2)
您的问题是您发送了如下请求:
req = requests.post(url, data=json.dumps(payload), headers={'Content-Type': 'application/json'})
发送json数据时,您应该使用requests
参数在json
中格式化请求,如下所示:
req = requests.post(url, json=payload)
此外,在您的烧瓶应用中,您可以通过request.json
由于内容类型为application/json
- 它不会显示在request.form
中 - 当收到具有适当内容类型(例如{{}的请求时,数据将显示在request.form
中1}}
答案 1 :(得分:0)
POST 请求中的内容类型标题是什么?
如其docs: request.form 中所述,dict包含从POST或PUT格式解析的数据,而 request.data 包含传入请求数据为字符串,以防它带有mimetype Flask无法处理。
以下代码:
# -*- coding: utf-8 -*-
from flask import Flask, request
app = Flask("Test")
@app.route("/ping", methods=['POST'])
def ping():
print "Data: ", request.data
print "Form: ", request.form
return "pong"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7070, debug=False)
使用默认内容类型的卷曲, request.data 中没有数据:
curl -X POST -H "Content-Type: a/b" --data 'data=https://files.slack.com/files-pri/T03HPFD2P-F2RU2S4R0/schermafbeelding-2016-01-27-om-14.52.47.png' http://localhost:7070/ping
输出:
* Running on http://0.0.0.0:7070/ (Press CTRL+C to quit)
Data:
Form: ImmutableMultiDict([('data', u'https://files.slack.com/files-pri/T03HPFD2P-F2RU2S4R0/schermafbeelding-2016-01-27-om-14.52.47.png')])
127.0.0.1 - - [20/Oct/2016 21:40:41] "POST /ping HTTP/1.1" 200 -
但是使用未知的内容类型标题卷曲, request.form 中没有数据:
curl -X POST -H "Content-Type: a/b" --data 'data=https://files.slack.com/files-pri/T03HPFD2P-F2RU2S4R0/schermafbeelding-2016-01-27-om-14.52.47.png' http://localhost:7070/ping
输出:
Data: data=https://files.slack.com/files-pri/T03HPFD2P-F2RU2S4R0/schermafbeelding-2016-01-27-om-14.52.47.png
Form: ImmutableMultiDict([])
127.0.0.1 - - [20/Oct/2016 21:43:52] "POST /ping HTTP/1.1" 200 -
因此,如果您需要 request.form 中的表单数据,请确保 Content-Type 是Flask可以处理的内容之一。