HTTP Redirection
If you need a self-contained web server to handle redirection, you can try this simply Python code. It simple extends the base BaseHTTPServer class.
#! /usr/bin/python
import sys
import BaseHTTPServer
nerror=0
if len(sys.argv) >= 4:
try:
port = int(sys.argv[1])
except:
nerror += 1
args = sys.argv[2:]
if len(args) % 2 == 0:
mapping = dict( zip(args[::2], args[1::2]) )
else:
nerror += 1
else:
nerror += 1
if nerror > 0:
sys.stderr.write(\
"Usage: %s <port> <uri> <redirect> [<uri> <redirect>]" \
% \
sys.argv[0])
exit(0)
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(s):
if s.path in mapping:
url = mapping[s.path]
s.send_response(302)
s.send_header('Location', url)
s.end_headers()
else:
s.send_response(200)
s.send_header('Content-type', 'text/html')
s.end_headers()
s.wfile.write("<html><head><title>List of Redirection</title>")
s.wfile.write("</head><body><h1>List of Redirection</h1><hr>")
s.wfile.write("<ul>")
uris = mapping.keys()
uris.sort()
for uri in uris:
redirect = mapping[uri]
s.wfile.write("<li><a href=%s>%s -> %s</a>" % (redirect,
uri, redirect))
s.wfile.write("</ul></body></html>")
# ignore output
def log_message(s, format, *args):
pass
if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class(('', port), MyHandler)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
Launch it like this:
$ ./redirect.py Usage: ./redirect.py <port> <uri> <redirect> [<uri> <redirect>] $ ./redirect.py 8080 \ / http://chihungchan.blogspot.com/ \ /g http://www.google.com/ \ /c http://www.cnn.com/ \ /s http://www.sg/
If you forget what are the short url redirection, simply key in bogus URI

Labels: python


1 Comments:
Hi, I would like to implement the URL redirection in another file.
That will means that any change in this property file will not affect the source code.
Post a Comment
<< Home