This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Inconsistency in behaviour of urllib and urllib2 with file:// URLs
Type: behavior Stage: resolved
Components: Versions: Python 2.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: orsenthil Nosy List: orsenthil, vinay.sajip
Priority: low Keywords:

Created on 2010-05-24 10:23 by vinay.sajip, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (2)
msg106351 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2010-05-24 10:23
I encountered what seems like an incompatibility between urllib and urllib2 in the way they handle file:// URLs. Here's a console session to illustrate:

vinay <at> eta-karmic:/tmp$ echo Hello, world! >hello.txt
vinay <at> eta-karmic:/tmp$ cat hello.txt 
Hello, world!
vinay <at> eta-karmic:/tmp$ python
Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib,urllib2
>>> s = 'file:////tmp/hello.txt'
>>> f1 = urllib.urlopen(s)
>>> f1.read()
'Hello, world!\n'
>>> f2 = urllib2.urlopen(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/urllib2.py", line 124, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.6/urllib2.py", line 389, in open
    response = self._open(req, data)
  File "/usr/lib/python2.6/urllib2.py", line 407, in _open
    '_open', req)
  File "/usr/lib/python2.6/urllib2.py", line 367, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 1240, in file_open
    return self.parent.open(req)
  File "/usr/lib/python2.6/urllib2.py", line 389, in open
    response = self._open(req, data)
  File "/usr/lib/python2.6/urllib2.py", line 407, in _open
    '_open', req)
  File "/usr/lib/python2.6/urllib2.py", line 367, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 1287, in ftp_open
    raise URLError('ftp error: no host given')
urllib2.URLError: <urlopen error ftp error: no host given>
>>> 

The problem appears to be that urllib allows a badly-formed file URL (with file://// rather than file:///) when it shouldn't (errors should not pass silently).
msg109957 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2010-07-11 03:29
There were differing behaviors in the way urllib and urllib2 was handling certain kind of file:// urls which led to this error. I just made them consistent with the fix in r82780 and merged into branches.  Now, this Exception won't be thrown at the file-open state, but a addinfo url object will be returned. The opening of an Invalid path will be left to the way OS will handle it, either allow it or reject.
History
Date User Action Args
2022-04-11 14:57:01adminsetgithub: 53047
2010-07-11 03:29:09orsenthilsetstatus: open -> closed
resolution: accepted -> fixed
messages: + msg109957

stage: resolved
2010-05-24 10:58:17orsenthilsetassignee: orsenthil

resolution: accepted
nosy: + orsenthil
2010-05-24 10:23:21vinay.sajipcreate