Sjoerd Mullender writes:
Urllib makes the URL of the opened file available through the geturl
method of the returned object. For local files, this consists of
file: plus the name of the file. This results in an invalid URL if
the file name was relative. This patch fixes this so that the
returned URL is just a relative URL in that case. When the file name
is absolute, the URL returned is of the form file:///absolute/path.
[I guess that a URL of the form "file:foo.html" is illegal... GvR]
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 1b5baaa..c12f451 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -325,13 +325,19 @@
'Content-Type: %s\n' % (mtype or 'text/plain')))
host, file = splithost(url)
if not host:
+ urlfile = file
+ if file[:1] == '/':
+ urlfile = 'file://' + file
return addinfourl(open(url2pathname(file), 'rb'),
- headers, 'file:'+file)
+ headers, urlfile)
host, port = splitport(host)
if not port \
and socket.gethostbyname(host) in (localhost(), thishost()):
+ urlfile = file
+ if file[:1] == '/':
+ urlfile = 'file://' + file
return addinfourl(open(url2pathname(file), 'rb'),
- headers, 'file:'+file)
+ headers, urlfile)
raise IOError, ('local file error', 'not on local host')
# Use FTP protocol