【问题标题】:Send JSON-Request to Flask via Curl [duplicate]通过 Curl 向 Flask 发送 JSON 请求 [重复]
【发布时间】:2018-04-12 12:25:31
【问题描述】:

我在烧瓶中设置了一个非常简单的发布路线,如下所示:

from flask import Flask, request

app = Flask(__name__)

@app.route('/post', methods=['POST'])
def post_route():
    if request.method == 'POST':

        data = request.get_json()

        print('Data Received: "{data}"'.format(data=data))
        return "Request Processed.\n"

app.run()

这是我尝试从命令行发送的 curl 请求:

curl localhost:5000/post -d '{"foo": "bar"}'

但是,它仍然会打印出“收到的数据:“无””。因此,它无法识别我传递给它的 JSON。

这种情况下需要指定json格式吗?

【问题讨论】:

    标签: python json windows curl flask


    【解决方案1】:

    根据get_json 文档:

    如果 mimetype 不是 application/json,[..] 函数将返回 None,但这可以被 force 参数覆盖。

    因此,要么将传入请求的 mimetype 指定为 application/json

    curl localhost:5000/post -d '{"foo": "bar"}' -H 'Content-Type: application/json'
    

    或使用 force=True 强制 JSON 解码:

    data = request.get_json(force=True)
    

    如果在 Windows 上运行cmd.exe,而不是 PowerShell),您还需要将 JSON 数据的引用从单引号更改为双引号:

    curl localhost:5000/post -d "{\"foo\": \"bar\"}" -H 'Content-Type: application/json'
    

    【讨论】:

    • 不幸的是,仍然无法正常工作。
    • 你看过问题的编辑吗?我以为您有错字,但也许这也是您的代码中的错误。检查您的打印行使用格式:print('Data Received: "{data}"'.format(data=data)).
    • 哦,我只是在使用新的 Python 3.6 功能,而不是在字符串前面放一个 'f' 并可以直接在其中使用变量的格式方法 :)
    • 如果你想使用新的插值字符串,你错过了 f 前缀..
    • @user305883, request.form 包含表单值。当您使用 JSON 正文编码时,这不是形式。查看表单简介here
    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2017-04-23
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多