繁体   English   中英

在 Flask 中获取原始 POST 有效负载

[英]Get raw POST payload in Flask

我正在通过 cUrl 发送文本

curl -X POST -d "Separate account charge and opdeducted fr" http://192.168.50.8/text

并尝试获得

@application.route("/text",methods=['POST'])
def clausIE():
      content = request.data
      text = str(content, encoding="utf-8")

但是得到空字符串,我做错了什么?

注意:我使用的是 Python3.6

这并不是 Flask 的问题,您使用了错误的curl选项。

-d开关应该只用于表单数据。 curl自动将 Content-Type 标头设置为application/x-www-form-urlencoded ,这意味着 Flask 将加载原始正文内容并将其解析为表单。 您必须手动设置不同的 Content-Type 标头,使用-H 'Content-Type: application/octet-stream'或其他更适合您的数据的 MIME 类型。

您还想使用--data-binary ,而不是-d ( --data ),因为后者还尝试将内容解析为键值字段并将删除换行符:

curl -X POST -H 'Content-Type: application/octet-stream' \
   --data-binary "Separate account charge and opdeducted fr" \
   http://192.168.50.8/text

完整的答案似乎分散在一些评论和已接受的回复中。 所以总结一下,Python Flask 代码应该是这样的

@application.route("/text",methods=['POST'])
def clausIE():
    content = request.get_data()

    text = str(content, encoding="utf-8") 

    return text

这就是你应该在你的终端上拥有的

curl -X POST --data-binary "Hello World!" http://192.168.50.8/text

在我自己的设置 (OS X) 中,我可以删除-X POST并将 URL 括在引号中,这样就可以了

curl --data-binary "Hello World!" "http://192.168.50.8/text"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM