【问题标题】:PHP Requests to Flask endpoint对 Flask 端点的 PHP 请求
【发布时间】:2016-05-26 19:19:44
【问题描述】:

我正在烧瓶上构建一个 python 端点(我对它很陌生)。我正在从 PHP 向它发送请求(因为这是我们大多数用户用来发送请求的方式)。我有一个应该发送的非关联数据数组(即类似'mode' => array('foo', 'bar', 'baz')

但是在烧瓶中做str(request.form)时,我得到的只是ImmutableMultiDict([('mode[1]', 'foo'), ('mode[0]', 'bar'), ('mode[2]', 'baz')])

现在查看stackoverflow(例如Sending array data with jquery and flask)后,我发现这表明我应该能够执行request.form.getlist('mode[]') 之类的操作(带或不带方括号-取决于您在此处查看的问题)。但是两者都不起作用。

最终我找到了一个临时解决方案,如果您在将数据放入 curl 帖子字段之前对数据进行 json_encode(即您执行'mode' => json_encode(array('foo', 'bar', 'baz')),那么 Flask 似乎可以很好地接收到东西(ImmutableMultiDict([('mode', '["foo","bar","baz"]')])

但我真的不明白为什么这个解决方案有效 - 我是靠运气而不是任何有根据的猜测才发现它的。谁能解释一下为什么这样做的逻辑或者是否有更好的 (TM) 解决方案。

提前致谢!

【问题讨论】:

    标签: php python curl python-requests werkzeug


    【解决方案1】:

    你可以这样做:

    request.form.values()
    

    这样你将只从字典的对中获取值作为一个数组。您无需将数据编码和解码为 JSON 即可读取值。

    【讨论】:

    • 对不起,我应该在我的请求中说得更清楚。这不是整个发布请求。模式是我提交的 3 个数组键之一!我只是简化了问题
    • 是的,很抱歉,如果有多个键,它将无法工作。您是否尝试过此解决方案 - stackoverflow.com/questions/24808660/… 它正在使用 MultiDict.getlist
    • 是的,这与我链接到的 SO 帖子的答案相同。但它失败了,因为我在 ImmutableMultiDict 对象的模式变量中有数字索引(或者至少我假设这是问题所在),因为我得到的只是 getlist 中的一个空列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多