[Twisted-web] Can't get XMLRPC server working with Twisted 2.1
Remi Cool
mailinglists at smartology.nl
Tue Nov 15 00:18:40 MST 2005
Matt Goodall wrote:
>Remi Cool wrote:
>
>
>>Hello Twisters,
>>
>>I've looked in the documentation, searched the archives and the web, but
>>found no solution to the XMLRPC problem I'm having.
>>
>>I've used the finger example code to create an XMLRPC server, but I keep
>>getting the 405 Method not allowed error. I'm probably overlooking
>>something very obvious, call me stupid, but I can't get it to work.
>>Below the code I'm using.
>>
>>If someone has a clue ... please enlighten me.
>>
>>
>
>The "self.putChild('RPC2', myXMLRPC(self.service))" line in the server
>code makes your XMLRPC resource available as the "RPC2" child of the
>root resource. That gives a full URL path to the XMLRPC resource of "/PRC2"
>
>Your client code is not using the correct URL, so it's not requesting
>the XMLRPC resource. The creation of the Proxy instance should be:
>
> proxy = Proxy('http://localhost:7080/RPC2')
>
>Hope this helps.
>
>- Matt
>
>
Thanks, that solved the problem.
- Remi -
>
>
>>-- Remi --
>>
>>Server code:
>>
>>#!/usr/bin/env python
>># -*- coding: iso-8859-15 -*-
>>
>>""""""
>>import sys
>>
>>from twisted.application import internet, service
>>from twisted.internet import reactor, protocol, defer
>>from twisted.web import resource, server, static, xmlrpc
>>from twisted.python import components, rebuild
>>from zope.interface import Interface, implements
>>
>>
>>class myXMLRPC(xmlrpc.XMLRPC):
>> """This class contains all root xmlrpc methods and the modules
>>subhandler."""
>> def __init__(self, service):
>> xmlrpc.XMLRPC.__init__(self)
>> self.service = service
>>
>> def xmlrpc_echo(self, x):
>> """Simple echo function"""
>> return x
>>
>>
>>def catchError(err):
>> return "Internal error in server"
>>
>>
>>class IowwService(components.Interface):
>> """"""
>> def rebuild(self, modname):
>> """Rebuild classes in given module"""
>>
>>
>>class httpResource(resource.Resource):
>>
>> implements(resource.IResource)
>>
>> def __init__(self, service):
>> resource.Resource.__init__(self)
>> self.service = service
>> self.putChild('RPC2', myXMLRPC(self.service))
>>
>> def render(self, request):
>> self._clientIP = request.getClientIP()
>> return resource.Resource.render(self, request)
>>
>> def render_GET(self, request):
>> """Process HTTP GET Requests."""
>> return '<html><body><h3>Not Implemented</h3></body></html>'
>>
>> def getChild(self, path, request):
>> """This method handles http calls"""
>> return httpResource(self.service)
>>
>>components.registerAdapter(httpResource, IowwService, resource.IResource)
>>
>>
>>class owwService(service.Service):
>> """"""
>> implements(IowwService)
>>
>> def rebuild(self, modname):
>> """Rebuild classes in given module"""
>> mod = sys.modules[modname]
>> rebuild.rebuild(mod)
>>
>>
>>def main():
>> """"""
>> application = service.Application('OWW', uid=100, gid=100)
>> s = owwService()
>> serviceCollection = service.IServiceCollection(application)
>> internet.TCPServer(7080,
>>server.Site(resource.IResource(s))).setServiceParent(serviceCollection)
>> serviceCollection.startService()
>> reactor.run()
>>
>>if __name__ == '__main__':
>> main()
>>
>>
>>And the client code:
>>
>>#!/usr/bin/env python
>>
>>from twisted.web.xmlrpc import Proxy
>>from twisted.internet import reactor
>>
>>def printValue(value):
>> print repr(value)
>> reactor.stop()
>>
>>def printError(error):
>> print 'error', error
>> reactor.stop()
>>
>>proxy = Proxy('http://localhost:7080')
>>proxy.callRemote('echo', 'hello world').addCallbacks(printValue, printError)
>>reactor.run()
>>
>>
>>
>>_______________________________________________
>>Twisted-web mailing list
>>Twisted-web at twistedmatrix.com
>>http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>
>>
>
>
>
More information about the Twisted-web
mailing list