#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))
это дает? (Непосредственно перед
Ответ №1:
body.read()
Метод работает должным образом, только если тело запроса было обработано, что происходит только тогда, когда request.process_request_body
имеет значение True (это по умолчанию) и когда метод запроса, в request.method_with_bodies
котором по умолчанию только PUT и POST , но не GET (который вы, вероятно, использовали при запросе страницы с помощью браузера).
Комментарии:
1. Спасибо за это объяснение! Выданное исключение должно быть одним из наименее описательных, которые я когда-либо видел…