ошибка cherrypy.request.body.read()

#python #request #cherrypy

#python #запрос #cherrypy

Вопрос:

У меня возникли некоторые проблемы с доступом к телам http-запросов с помощью фреймворка CherryPy. Я использую 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()
 

я могу просто просмотреть тело запроса. Я попытался найти решение в Google, но ничего не нашел. Учитывая, что я новичок в python, должно быть что-то, что я делаю неправильно, но что?

Заранее спасибо за вашу ценную помощь.

Комментарии:

1. Что вам print(type(cherrypy.request.body.fp)) это дает? (Непосредственно перед print строкой.)

Ответ №1:

body.read() Метод работает должным образом, только если тело запроса было обработано, что происходит только тогда, когда request.process_request_body имеет значение True (это по умолчанию) и когда метод запроса, в request.method_with_bodies котором по умолчанию только PUT и POST , но не GET (который вы, вероятно, использовали при запросе страницы с помощью браузера).

Комментарии:

1. Спасибо за это объяснение! Выданное исключение должно быть одним из наименее описательных, которые я когда-либо видел…