cherrypy.request.body.read() 错误

5 投票
1 回答
7415 浏览
提问于 2025-04-17 05:30

我在使用CherryPy框架时遇到了一些问题,特别是在访问HTTP请求的内容时。我的环境是CherryPy 3.2.0,运行在一台x86_64的Arch Linux机器上,使用的是Python3和Aptana Web Studio IDE。

当我尝试通过常用的cherrypy.request.body.read()来获取请求的内容时,出现了一个错误:

File "/usr/lib/python3.2/site-packages/cherrypy/_cpreqbody.py", line 450, in read
return self.fp.read(size, fp_out)
TypeError: read() takes at most 2 positional arguments (3 given)

导致错误的代码是:

import cherrypy

class Test:
    def index(self):
        print(cherrypy.request.body.read())
        #print(cherrypy.request.body.readline()) <- this works!
    return 'HelloWorld'
index.exposed = True

if __name__ == '__main__':
    cherrypy.quickstart(Test())

不过,使用

cherrypy.request.body.readline() or cherrypy.request.body.readlines(n)

而不是

cherrypy.request.body.read()

我可以顺利地查看请求的内容。我试着在网上搜索解决办法,但没有找到。考虑到我还是个Python新手,可能是我做错了什么,但到底是什么呢?

非常感谢你们的帮助。

1 个回答

10

body.read() 方法只有在请求的主体被处理过时才会正常工作。这种处理只有在 request.process_request_body 为真时才会发生(默认就是这样),并且请求的方法必须在 request.method_with_bodies 中,这个默认只包括 PUT 和 POST 方法,而不包括 GET 方法(你可能在用浏览器请求页面时用的就是 GET 方法)。

撰写回答