Guido van Rossum | f06ee5f | 1996-11-27 19:52:01 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
Guido van Rossum | dfa70a9 | 1995-01-10 17:05:37 +0000 | [diff] [blame] | 2 | |
| 3 | # www3.py -- print the contents of a URL on stdout |
| 4 | # - error checking |
| 5 | # - Error 302 handling |
| 6 | |
| 7 | import sys |
| 8 | import urllib |
| 9 | import types |
| 10 | |
| 11 | def main(): |
| 12 | if len(sys.argv) != 2 or sys.argv[1][:1] == '-': |
| 13 | print "Usage:", sys.argv[0], "url" |
| 14 | sys.exit(2) |
| 15 | url = sys.argv[1] |
| 16 | fp = my_urlopen(url) |
| 17 | while 1: |
| 18 | line = fp.readline() |
| 19 | if not line: break |
| 20 | sys.stdout.write(line) |
| 21 | |
| 22 | def my_urlopen(url): |
| 23 | try: |
| 24 | fp = urllib.urlopen(url) |
| 25 | return fp |
| 26 | except IOError, msg: |
| 27 | if type(msg) == types.TupleType and len(msg) == 4: |
| 28 | m = msg[3] |
| 29 | if msg[1] == 302: |
| 30 | if m.has_key('location'): |
| 31 | url = m['location'] |
| 32 | print 'Location:', url |
| 33 | return my_urlopen(url) |
| 34 | elif m.has_key('uri'): |
| 35 | url = m['uri'] |
| 36 | print 'URI:', url |
| 37 | return my_urlopen(url) |
| 38 | print '(Error 302 w/o Location/URI header???)' |
| 39 | print msg[:3] |
| 40 | for line in m.headers: |
| 41 | sys.stdout.write(line) |
| 42 | else: |
| 43 | print msg |
| 44 | sys.exit(1) |
| 45 | |
| 46 | main() |