~exarkun/+junk/training

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from twisted.internet import reactor
from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import LineOnlyReceiver


def printDateAndExit(date):
    print 'Server time is', date.strip()
    reactor.stop()

def main():
    factory = ClientFactory()
    factory.protocol = lambda: DateReader(printDateAndExit)
    reactor.connectTCP('google.com', 80, factory)
    reactor.run()


class DateReader(LineOnlyReceiver):
    def __init__(self, dateHeaderReceived):
        self.dateHeaderReceived = dateHeaderReceived


    def connectionMade(self):
        self.transport.write('HEAD / HTTP/1.0\r\n\r\n')


    def lineReceived(self, line):
        if line.lower().startswith('date:'):
            ignored, date = line.split(':', 1)
            self.dateHeaderReceived(date)
            self.transport.loseConnection()

main()