#!/usr/bin/env python

from threading import Thread
from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class RedirectHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(301)
        self.send_header("Location", "http://%s:%d" %
                         (self.server.server_name, server.server_port))
        self.end_headers()

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.wfile.write("Hello Port %d!\n" % self.server.server_port)

class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
    pass

def run_server(server):
    server.serve_forever()

server = HTTPServer(("localhost", 0), Handler)
redirect = ThreadingHTTPServer(("localhost", 0), RedirectHandler)

thread = Thread(target=run_server, args=[redirect])
thread.start()

print "Connect to http://127.0.0.1:%d to be redirected to " \
    "http://127.0.0.1:%d" % (redirect.server_port, server.server_port)

try:
    server.serve_forever()
except KeyboardInterrupt:
    redirect.shutdown()
    thread.join()
