| #! /usr/bin/env python | 
 |  | 
 | # www3.py -- print the contents of a URL on stdout | 
 | # - error checking | 
 | # - Error 302 handling | 
 |  | 
 | import sys | 
 | import urllib | 
 | import types | 
 |  | 
 | def main(): | 
 | 	if len(sys.argv) != 2 or sys.argv[1][:1] == '-': | 
 | 		print "Usage:", sys.argv[0], "url" | 
 | 		sys.exit(2) | 
 | 	url = sys.argv[1] | 
 | 	fp = my_urlopen(url) | 
 | 	while 1: | 
 | 		line = fp.readline() | 
 | 		if not line: break | 
 | 		sys.stdout.write(line) | 
 |  | 
 | def my_urlopen(url): | 
 | 	try: | 
 | 		fp = urllib.urlopen(url) | 
 | 		return fp | 
 | 	except IOError, msg: | 
 | 		if type(msg) == types.TupleType and len(msg) == 4: | 
 | 			m = msg[3] | 
 | 			if msg[1] == 302: | 
 | 				if m.has_key('location'): | 
 | 					url = m['location'] | 
 | 					print 'Location:', url | 
 | 					return my_urlopen(url) | 
 | 				elif m.has_key('uri'): | 
 | 					url = m['uri'] | 
 | 					print 'URI:', url | 
 | 					return my_urlopen(url) | 
 | 				print '(Error 302 w/o Location/URI header???)' | 
 | 			print msg[:3] | 
 | 			for line in m.headers: | 
 | 				sys.stdout.write(line) | 
 | 		else: | 
 | 			print msg | 
 | 		sys.exit(1) | 
 |  | 
 | main() |