Форум сайта python.su
Как работать с Zope через XMLRPC?
Когда делаю так:
>>> from xmlrpclib import ServerProxy >>> server = ServerProxy("http://localhost") >>> f=server.objectIds >>> print f()
import string, xmlrpclib, httplib from base64 import encodestring class BasicAuthTransport(xmlrpclib.Transport): def __init__(self, username=None, password=None): self.username=username self.password=password def request(self, host, handler, request_body): # issue XML-RPC request h = httplib.HTTP(host) h.putrequest("POST", handler) # required by HTTP/1.1 h.putheader("Host", host) # required by XML-RPC h.putheader("User-Agent", self.user_agent) h.putheader("Content-Type", "text/xml") h.putheader("Content-Length", str(len(request_body))) # basic auth if self.username is not None and self.password is not None: h.putheader("AUTHORIZATION", "Basic %s" % string.replace( encodestring("%s:%s" % (self.username, self.password)), "\012", "")) h.endheaders() if request_body: h.send(request_body) errcode, errmsg, headers = h.getreply() if errcode != 200: raise xmlrpclib.ProtocolError( host + handler, errcode, errmsg, headers ) return self.parse_response(h.getfile()) req='<?xml version="1.0"?><methodCall><methodName>objectIds</methodName><params/></methodCall>' MyTransport=BasicAuthTransport('George','password') print MyTransport.request("http://localhost",None,req)
Отредактировано (Июль 6, 2007 05:55:02)
Офлайн
zope третий?
про второй ничего не знаю. В третий тока-тока врубаюсь.
url примерно так должен выглядеть: http://localhost:8080/object
порт указывать обязательно, т.к. zope(twisted) на нем висит. После порта - путь до объекта. xmlrpc сервер выступает как “вид”. представление определенного объекта. для того штаб его пользовать, для объекта object, надо прописать методы (в питоновском классе наследованном от MethodPublisher) + прописать их в zcml.
у Рихтера в книжке вполне рабочий пример. тащи оттуда.
если zope третий, конечно.
sorry за дилетанство.
Офлайн
Если нужно просто подключиться к зопе из обычного питоновского приложения не обязательно через XMLRPC, то можно заюзать родные библиотеки зопы. Через них можно делать все точно также, как из самой зопы. С установкой идет пример
Офлайн