| --- misc/Python-2.6.1/Lib/urllib.py 2008-09-21 23:27:51.000000000 +0200 |
| +++ misc/build/Python-2.6.1/Lib/urllib.py 2010-11-23 15:41:08.000000000 +0100 |
| @@ -176,6 +176,9 @@ class URLopener: |
| def open(self, fullurl, data=None): |
| """Use URLopener().open(file) instead of open(file, 'r').""" |
| fullurl = unwrap(toBytes(fullurl)) |
| + # percent encode url. fixing lame server errors like space within url |
| + # parts |
| + fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]|") |
| if self.tempcache and fullurl in self.tempcache: |
| filename, headers = self.tempcache[fullurl] |
| fp = open(filename, 'rb') |
| @@ -233,41 +236,45 @@ class URLopener: |
| except IOError, msg: |
| pass |
| fp = self.open(url, data) |
| - headers = fp.info() |
| - if filename: |
| - tfp = open(filename, 'wb') |
| - else: |
| - import tempfile |
| - garbage, path = splittype(url) |
| - garbage, path = splithost(path or "") |
| - path, garbage = splitquery(path or "") |
| - path, garbage = splitattr(path or "") |
| - suffix = os.path.splitext(path)[1] |
| - (fd, filename) = tempfile.mkstemp(suffix) |
| - self.__tempfiles.append(filename) |
| - tfp = os.fdopen(fd, 'wb') |
| - result = filename, headers |
| - if self.tempcache is not None: |
| - self.tempcache[url] = result |
| - bs = 1024*8 |
| - size = -1 |
| - read = 0 |
| - blocknum = 0 |
| - if reporthook: |
| - if "content-length" in headers: |
| - size = int(headers["Content-Length"]) |
| - reporthook(blocknum, bs, size) |
| - while 1: |
| - block = fp.read(bs) |
| - if block == "": |
| - break |
| - read += len(block) |
| - tfp.write(block) |
| - blocknum += 1 |
| - if reporthook: |
| - reporthook(blocknum, bs, size) |
| - fp.close() |
| - tfp.close() |
| + try: |
| + headers = fp.info() |
| + if filename: |
| + tfp = open(filename, 'wb') |
| + else: |
| + import tempfile |
| + garbage, path = splittype(url) |
| + garbage, path = splithost(path or "") |
| + path, garbage = splitquery(path or "") |
| + path, garbage = splitattr(path or "") |
| + suffix = os.path.splitext(path)[1] |
| + (fd, filename) = tempfile.mkstemp(suffix) |
| + self.__tempfiles.append(filename) |
| + tfp = os.fdopen(fd, 'wb') |
| + try: |
| + result = filename, headers |
| + if self.tempcache is not None: |
| + self.tempcache[url] = result |
| + bs = 1024*8 |
| + size = -1 |
| + read = 0 |
| + blocknum = 0 |
| + if reporthook: |
| + if "content-length" in headers: |
| + size = int(headers["Content-Length"]) |
| + reporthook(blocknum, bs, size) |
| + while 1: |
| + block = fp.read(bs) |
| + if block == "": |
| + break |
| + read += len(block) |
| + tfp.write(block) |
| + blocknum += 1 |
| + if reporthook: |
| + reporthook(blocknum, bs, size) |
| + finally: |
| + tfp.close() |
| + finally: |
| + fp.close() |
| del fp |
| del tfp |
| |