Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2007 05:54:25

$m1t
От:
Зарегистрирован: 2006-12-31
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работать с Zope через XMLRPC?

Как работать с 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?



Отредактировано (Июль 6, 2007 05:55:02)

Офлайн

#2 Июль 6, 2007 09:54:48

tretiy3
От:
Зарегистрирован: 2007-03-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работать с Zope через XMLRPC?

zope третий?
про второй ничего не знаю. В третий тока-тока врубаюсь.
url примерно так должен выглядеть: http://localhost:8080/object
порт указывать обязательно, т.к. zope(twisted) на нем висит. После порта - путь до объекта. xmlrpc сервер выступает как “вид”. представление определенного объекта. для того штаб его пользовать, для объекта object, надо прописать методы (в питоновском классе наследованном от MethodPublisher) + прописать их в zcml.
у Рихтера в книжке вполне рабочий пример. тащи оттуда.
если zope третий, конечно.
sorry за дилетанство.



Офлайн

#3 Июль 24, 2007 15:28:15

albert
От:
Зарегистрирован: 2006-09-15
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работать с Zope через XMLRPC?

Если нужно просто подключиться к зопе из обычного питоновского приложения не обязательно через XMLRPC, то можно заюзать родные библиотеки зопы. Через них можно делать все точно также, как из самой зопы. С установкой идет пример



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version