Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2012-01-15

Zope & HTTP PUT

Я тут уже выступал на тему «а как 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)

На выходе получил такие принты:
as guest
resp=[{'bobo-exception-line': '717', 'status': '401', 'content-length': '259', 'bobo-exception-value': 'See the server error log for details', 'content-type': 'text/html; charset=utf-8', 'bobo-exception-type': 'Unauthorized', 'server': 'Zope/(Zope 2.11.4-final, python 2.4.4, win32) ZServer/1.1', 'date': 'Sun, 15 Jan 2012 17:16:42 GMT', 'bobo-exception-file': 'HTTPResponse.py', 'www-authenticate': 'basic realm="Zope"'}]

content=[<strong>You are not authorized to access this resource.</strong> (Also, the following error occurred while attempting to render the standard error message, please see the event log for full details: You are not allowed to access 'title_or_id' in this context)]


as admin
resp=[{'date': 'Sun, 15 Jan 2012 17:30:14 GMT', 'status': '204', 'accept-ranges': 'none', 'server': 'Zope/(Zope 2.11.4-final, python 2.4.4, win32) ZServer/1.1'}]

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
Такие дела.

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

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)