首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Falcon -获取POST数据

Python Falcon -获取POST数据
EN

Stack Overflow用户
提问于 2018-02-08 14:42:16
回答 8查看 19.5K关注 0票数 15

我尝试在我的项目中使用falcon包。问题是我没有找到从HTTP post请求中获取正文数据的方法。

我使用了示例中的代码,但是req.stream.read()没有像预期的那样返回JSON。

代码是:

代码语言:javascript
复制
raw_json = req.stream.read()
result.json(raw_json, encoding='utf-8')
resp.body = json.dumps(result_json, encoding='utf-8')

如何获取帖子数据?

谢谢你的帮助

EN

回答 8

Stack Overflow用户

发布于 2018-02-08 17:19:48

几乎没有深入研究这个问题,导致了以下linked issue on github。它指出,至少在其0.3版和使用Python2的falcon框架中,如果数据“POSTed”被恰当地转义,就不会将它们解析为字符串。我们可以使用更多关于您试图通过POST请求发送的数据以及发送的格式的更多信息,例如,如果它是作为简单文本发送的,或者使用Header information Content-Type:application/json发送,或者如果它通过HTML表单发送。

虽然从问题中还不清楚确切的问题,但我仍然建议尝试使用bounded_stream而不是stream,如下所示:

代码语言:javascript
复制
raw_json = req.bounded_stream.read()
result.json(raw_json, encoding='utf-8')
resp.body = json.dumps(result_json, encoding='utf-8')

对于官方文档,建议在不确定的条件下使用bounded_stream,例如内容长度未定义或0,或者如果标题信息完全丢失。

在官方falcon documentation中,对bounded_stream的描述如下。

WSGI like包装器,用于标准化不同

服务器所使用的本机输入对象之间的某些差异。特别是,bounded_stream知道正文的预期内容长度,并且永远不会阻塞越界读取,假设客户端在向服务器传输数据时不会停止。

Falcon接收HTTP请求数据作为buffer对象,由WSGI包装器传递,WSGI包装器从客户端接收数据,出于性能原因,它可能无法在数据上运行正确的解析以转换为更可用的数据结构。

票数 8
EN

Stack Overflow用户

发布于 2019-07-15 14:35:56

falcon 2中,如果使用json类型,请使用

例如:

代码语言:javascript
复制
import falcon
from json import dumps

class Resource(object):
    def on_post(self, req, resp, **kwargs):
        result = req.media
        # do your job
        resp.body = dumps(result)


api = falcon.API()

api.add_route('/test', Resource())
票数 7
EN

Stack Overflow用户

发布于 2019-02-21 16:42:46

非常感谢Ryan (和Prateek Jain)的回答。

解决方案很简单,就是把app.req_options.auto_parse_form_urlencoded=True。例如:

代码语言:javascript
复制
import falcon

class ThingsResource(object):
    def on_post(self, req, resp):
        value = req.get_param("value", required=True)
        #do something with value

app = falcon.API()
app.req_options.auto_parse_form_urlencoded=True

things = ThingsResource()

app.add_route('/things', things)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48679165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档