POST service parameter - FLASK

时间:2016-10-20 13:08:34

标签: python flask

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?

2 个答案:

答案 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

访问提交的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可以处理的内容之一。