1 from twisted.internet import reactor
\r
2 from twisted.internet.protocol import ClientFactory,connectionDone
\r
3 from twisted.web2.client.http import HTTPClientProtocol
\r
5 from twisted.internet import error
\r
9 class myProtocol(HTTPClientProtocol):
\r
15 def __init__(self,hostname,path,method="GET"):
\r
18 self.hostname=hostname
\r
19 HTTPClientProtocol.__init__(self)
\r
22 def rawDataReceived(self,line):
\r
23 for l in line.split(self.delimiter):
\r
28 self.headerread=True
\r
32 def connectionMade(self):
\r
33 self.sendLine("%s %s HTTP/1.0"%(self.method,self.path))
\r
34 self.sendLine("Host: %s"%self.hostname)
\r
35 self.sendLine("User-Agent: enigma2 lastfm")
\r
39 class myClientFactory(ClientFactory):
\r
44 def __init__(self,hostname,path,method="GET",callback=None,errorback=None):
\r
45 self.hangup_ok = False
\r
48 self.callback=callback
\r
49 self.errorback=errorback
\r
50 self.protocol = myProtocol(hostname,self.path,method=self.method)
\r
52 def startedConnecting(self, connector):
\r
55 def buildProtocol(self, addr):
\r
56 return self.protocol
\r
58 def clientConnectionLost(self, connector, reason):
\r
59 if not self.hangup_ok:
\r
60 self.callback(self.protocol.data)
\r
61 def clientConnectionFailed(self, connector, reason):
\r
62 if self.errorback is not None:
\r
63 self.errorback(reason.getErrorMessage())
\r
64 ClientFactory.clientConnectionFailed(self, connector, reason)
\r
67 def getPage(hostname,port,path,method="GET",callback=None,errorback=None):
\r
68 f = myClientFactory(hostname,path,method,callback,errorback)
\r
70 hostname = socket.gethostbyname(hostname)
\r
71 except socket.error,e:
\r
72 msg = "address %r not found! %s" % (hostname,e)
\r
73 if errorback is not None:
\r
75 reactor.connectTCP(hostname, port, f)
\r
77 def getFile(filename,hostname,port,path,method="GET",callback=None,errorback=None):
\r
80 fp = open(filename,"w")
\r
86 if errorback is not None:
\r
89 f = myClientFactory(hostname,path,method,save,errorback)
\r
91 hostname = socket.gethostbyname(hostname)
\r
92 except socket.error,e:
\r
93 msg = "address %r not found! %s" % (hostname,e)
\r
94 if errorback is not None:
\r
96 reactor.connectTCP(hostname, port, f)
\r