You are missing the basics of Twisted. Everything revolves around reactorthat you never even run. Think of a reactor like this:

(source: krondo.com )
Until you start the reactor, when setting up deferrals, all you do is chain them without events from which you can shoot.
Twisted Intro Dave Peticolas. , Twisted.
, getPage:
from twisted.web.client import getPage
from twisted.internet import reactor
url = 'http://aol.com'
def print_and_stop(output):
print output
if reactor.running:
reactor.stop()
if __name__ == '__main__':
print 'fetching', url
d = getPage(url)
d.addCallback(print_and_stop)
reactor.run()
getPage , print_and_stop . reactor. getPage, print_and_stop aol.com, .
, OP:
class GrabPage:
def __init__(self, page):
self.page = page
self.data = None
def start(self, *args):
if args == ():
d1 = getPage(self.page)
else:
if len(args) == 2:
d1 = getPage(self.page, headers={"Authorization": " ".join(args)})
else:
raise Exception('Missing parameters')
d1.addCallback(self.pageCallback)
dl = DeferredList([d1])
d1.addErrback(self.errorHandler)
dl.addCallback(self.listCallback)
def errorHandler(self,result):
pass
def pageCallback(self, result):
self.data = result
return result
def listCallback(self, result):
print result
if reactor.running:
reactor.stop()
a = GrabPage('http://google.com')
a.start()
if not reactor.running:
reactor.run()
data = a.data
print '------REACTOR STOPPED------'
print
print '------a.data[:100]------'
print data[:100]