]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
add User-agent hdr; read and close the file upon http error
authorGuido van Rossum <guido@python.org>
Thu, 22 Jun 1995 19:00:13 +0000 (19:00 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 22 Jun 1995 19:00:13 +0000 (19:00 +0000)
Lib/urllib.py

index c49f032066bf1fc34db6e3261d41abf114b65378..b7a1ce8e37f988cb91e387611fcb02f034cc431d 100644 (file)
@@ -19,6 +19,9 @@ import socket
 import regex
 
 
+__version__ = '1.0'
+
+
 # This really consists of two pieces:
 # (1) a class which handles opening of all sorts of URLs
 #     (plus assorted utilities etc.)
@@ -51,7 +54,8 @@ class URLopener:
 
        # Constructor
        def __init__(self):
-               self.addheaders = []
+               server_version = "Python-urllib/%s" % __version__
+               self.addheaders = [('User-agent', server_version)]
                self.tempcache = None
                # Undocumented feature: if you assign {} to tempcache,
                # it is used to cache files retrieved with
@@ -146,9 +150,15 @@ class URLopener:
                h = httplib.HTTP(host)
                h.putrequest('GET', selector)
                for args in self.addheaders: apply(h.putheader, args)
+               h.endheaders()
                errcode, errmsg, headers = h.getreply()
-               if errcode == 200: return addinfo(h.getfile(), headers)
-               else: raise IOError, ('http error', errcode, errmsg, headers)
+               fp = h.getfile()
+               if errcode == 200:
+                       return addinfo(fp, headers)
+               else:
+                       n = len(fp.read())
+                       fp.close()
+                       raise IOError, ('http error', errcode, errmsg, headers)
 
        # Use Gopher protocol
        def open_gopher(self, url):
@@ -322,6 +332,7 @@ class addbase:
                self.readline = None
                self.readlines = None
                self.fileno = None
+               if self.fp: self.fp.close()
                self.fp = None
 
 # Class to add a close hook to an open file