【问题标题】:Read From CherryPy Request Body Twice从 CherryPy 请求正文中读取两次
【发布时间】:2021-10-21 06:01:02
【问题描述】:

我遇到了一个问题,如果在完成请求时出现任何错误,我需要再次读取cherrypy 请求的正文。下面的代码显示了我的问题。我需要能够在第二次调用“读取”时获取正文的全部内容。

body_length = int(cherrypy.request.headers['Content-Length'])

data1 = cherrypy.request.body.read(body_length)
print len(data1)

// 338

data2 = cherrypy.request.body.read(body_length)
print len(data2)

// 0

我尝试过 seek,但它似乎不像cherrypy RequestBody 对象与像对象一样的 python 文件共享相同的功能。如何第二次阅读请求正文?

【问题讨论】:

  • 请问您为什么需要阅读原始正文? CherryPy 尝试包装原始主体并且没有一个很好的界面来进行直接读取(当你有一个大的多部分主体时这很有意义),它可以完成,但你需要有一个自定义的主体处理器或挂钩到before_request_body 的工具。如果你需要的是 json,那么有一个工具可以做到。
  • 是的,我只需要它在 json 中。我只是在获得原始数据后立即将其粘贴到 json.loads 中。

标签: python cherrypy


【解决方案1】:

如果 json 是您从正文中唯一需要的东西,那么 json tool 对于您的情况可能就足够了。

例子:

class Root:

    @cherrypy.expose
    @cherrypy.tools.json_in()
    def index(self):
        data = cherrypy.request.json # already in the form of a dict

有多种配置工具的方法,也可以在old post from my blog. 中查看其他示例

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2018-04-07
    • 2011-09-06
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多