94 lines
3.4 KiB
Diff
94 lines
3.4 KiB
Diff
|
--- 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
|
||
|
|