import tornado.httpserver
import tornado.httpclient
import tornado.ioloop
import tornado.options
import tornado.web
import logging
import time
from functools import partial
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self, url, retry = 0):
http = tornado.httpclient.AsyncHTTPClient()
request = tornado.httpclient.HTTPRequest(url=url,
connect_timeout=1.0, request_timeout=1.0)
http.fetch(request, callback=self.async_callback(
partial(self.on_response, retry=2, url = url) ) )
def on_response(self, response, retry= 0, url= None):
if response.error:
#import pdb; pdb.set_trace()
if isinstance(response.error, tornado.httpclient.HTTPError):
raise tornado.web.HTTPError(status_code = response.error.code)
if (retry > 0) and (url is not None) :
self.get(url, retry - 1)
else:
raise tornado.web.HTTPError(500)
else:
self.write(response.body)
self.finish()
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/(.*)", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()