- Я тут уже выступал на тему «а как Zope обрабатывает метод PUT протокола HTTP». Неясно было, Zope «из коробки» поддерживает этот метод или надо поднимать WebDAV?
-
- Сегодня я этот вопрос разьяснил. Сделал в Zope в папочке /uploader/t/ обьект ZPT с именем test и произвольным содержимым. Это получился типа сервер.
- Потом нарисова типа клиента
import httplib2 h = httplib2.Http(timeout=3) #~ h.add_credentials('guest', '1111') h.add_credentials('admin', '12345678') h.force_exception_to_status_code = True resp, content = h.request('http://localhost:8080/uploader/t/test', 'PUT', body='Test with text body', headers={'content-type':'text/plain'}) print 'resp=[%s]\ncontent=[%s]' % (resp, content) |
- На выходе получил такие принты:
|
|
- В переводе на понятный это звучит примерно так:
- я отправляю запрос обьекту типа ZPT в Zope сначала от обычного бесправного пользователя, затем от админа. В результате обычного пользователя посылают лесом.
- Админа пропускают, что приводит к замене внутренностей ZPT обьекта test засланным текстом.
-
- Выводы.
-
- Метод HTTP PUT обрабатывается в Zope без привлечения дополнительных серверов типа WebDAV. Что я и пытался выяснить.
- Как и указано в доках Zope, HTTP PUT рассматривается в Zope как вызов метода обьекта. В моем случае, для понятности происходящего, этот вызов можно записать как такой псевдокод
-
- obj = getObject('/uploader/t/test'); obj.PUT(requestBody)
-
- В результате такого вызова Zope заменяет код (текст) обьекта тем, что я прислал в запросе.
-
- Вопрос с обработкой PUT вылез из размышлений на тему «как ловчее файлы на сервер загружать», не просто так. Итак, чтобы мне сделать upload файлов через HTTP PUT, мне надо сделать такой продукт Zope, класс которого будет содержать переопределенный метод PUT. В этом методе я должен принимать чанки присылаемых файлов.
-
- Может быть так и сделаю. Пока на очереди способ
- HTTP POST multipart/form-data, Content-Transfer-Encoding : binary
- Такие дела.
-
Комментариев нет:
Отправить комментарий