1 from twisted.internet.protocol import ClientFactory
2 from twisted.protocols.http import HTTPClient
3 from twisted.internet.defer import Deferred
5 from xmlrpclib import loads, dumps
8 USER_AGENT = 'Python/Twisted XMLRPC 0.1'
9 class XMLRPCClient(HTTPClient):
10 def connectionMade(self):
11 payload = dumps(self.args, self.method)
12 self.sendCommand('POST', '/RPC2')
13 self.sendHeader('User-Agent', USER_AGENT)
14 self.sendHeader('Content-Type', 'text/xml')
15 self.sendHeader('Content-Length', len(payload))
17 self.transport.write(payload)
18 self.transport.write('\r\n')
20 def handleResponse(self, buf):
22 self.thehost = self.transport.getHost()[1]
26 args, name = loads(buf)
28 print "response decode error: " + `e`
34 l.append({'host' : self.thehost})
35 apply(self.d.callback, (l,))
37 class XMLRPCClientFactory(ClientFactory):
38 def __init__(self, method, args, callback=None, errback=None):
43 self.d.addCallback(callback)
45 self.d.addErrback(errback)
47 def buildProtocol(self, addr):
49 prot.method = self.method
54 def clientConnectionFailed(self, connector, reason):