Найти - Пользователи
Полная версия: Как работать с Zope через XMLRPC?
Начало » Zope/Plone/Bluebream » Как работать с Zope через XMLRPC?
1
$m1t
Как работать с Zope через XMLRPC?
Когда делаю так:
>>> from xmlrpclib import ServerProxy
>>> server = ServerProxy("http://localhost")
>>> f=server.objectIds
>>> print f()
Получаю error: (10061, ‘Connection refused’)

Взял с Zope.org кусок кода, где запрос посылается с авторизацией:
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)
Получаю:
InvalidURL: nonnumeric port: ‘//localhost’
Если изменить MyTransport.request("http://localhost“,None,req) на MyTransport.request(”http://localhost:8080“,None,req) то вообще:
gaierror: (11001, ‘getaddrinfo failed’)
Гуглил, читал доки – что то не помогло…

Еще вопрос: есть такая функция как SimpleXMLRPCServer – можно ли используя ее создать на каком-либо хостинге XMLRPC сервер? Мои эксперименты с аппачам успехом не увенчались. Я так же не понимаю, какой смысл передаваемого параметра:
server = SimpleXMLRPCServer((”localhost", 8000))
Первый(второй если считать c единицы =)) – это порт на который будут идти запросы, то зачем серверу знать свой url?
tretiy3
zope третий?
про второй ничего не знаю. В третий тока-тока врубаюсь.
url примерно так должен выглядеть: http://localhost:8080/object
порт указывать обязательно, т.к. zope(twisted) на нем висит. После порта - путь до объекта. xmlrpc сервер выступает как “вид”. представление определенного объекта. для того штаб его пользовать, для объекта object, надо прописать методы (в питоновском классе наследованном от MethodPublisher) + прописать их в zcml.
у Рихтера в книжке вполне рабочий пример. тащи оттуда.
если zope третий, конечно.
sorry за дилетанство.
albert
Если нужно просто подключиться к зопе из обычного питоновского приложения не обязательно через XMLRPC, то можно заюзать родные библиотеки зопы. Через них можно делать все точно также, как из самой зопы. С установкой идет пример
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB