我尝试在我的项目中使用falcon包。问题是我没有找到从HTTP post请求中获取正文数据的方法。
我使用了示例中的代码,但是req.stream.read()没有像预期的那样返回JSON。
代码是:
raw_json = req.stream.read()
result.json(raw_json, encoding='utf-8')
resp.body = json.dumps(result_json, encoding='utf-8')如何获取帖子数据?
谢谢你的帮助
发布于 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,如下所示:
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包装器从客户端接收数据,出于性能原因,它可能无法在数据上运行正确的解析以转换为更可用的数据结构。
发布于 2019-07-15 14:35:56
在falcon 2中,如果使用json类型,请使用
例如:
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())发布于 2019-02-21 16:42:46
非常感谢Ryan (和Prateek Jain)的回答。
解决方案很简单,就是把app.req_options.auto_parse_form_urlencoded=True。例如:
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)https://stackoverflow.com/questions/48679165
复制相似问题