~exarkun/+junk/training

7 by Jean-Paul Calderone
Basics of Deferreds
1
from twisted.internet import reactor
2
from twisted.internet.protocol import ClientFactory
3
from twisted.protocols.basic import LineOnlyReceiver
4
5
6
def printDateAndExit(date):
7
    print 'Server time is', date.strip()
8
    reactor.stop()
9
10
def main():
11
    factory = ClientFactory()
12
    factory.protocol = lambda: DateReader(printDateAndExit)
13
    reactor.connectTCP('google.com', 80, factory)
14
    reactor.run()
15
16
17
class DateReader(LineOnlyReceiver):
18
    def __init__(self, dateHeaderReceived):
19
        self.dateHeaderReceived = dateHeaderReceived
20
21
22
    def connectionMade(self):
23
        self.transport.write('HEAD / HTTP/1.0\r\n\r\n')
24
25
26
    def lineReceived(self, line):
27
        if line.lower().startswith('date:'):
28
            ignored, date = line.split(':', 1)
29
            self.dateHeaderReceived(date)
30
            self.transport.loseConnection()
31
32
main()
33
34