Title: urllib2 raises exception with non-200 success codes.
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.3
Status: closed Resolution: duplicate
Dependencies: Superseder: urllib* 20x responses not OK?
View: 1177
Assigned To: Nosy List: edw, jbelmonte, jimjjewett, jjlee
Priority: normal Keywords:

Created on 2004-06-13 04:00 by edw, last changed 2007-09-19 06:20 by georg.brandl. This issue is now closed.

Messages (6)
msg21178 - (view) Author: Ed Watkeys (edw) Date: 2004-06-13 04:00
If a server returns a code other than 200, specifically 201 
(Created), urllib2.urlopen will raise an HTTPError exception. I ran 
into this while implementing an Atom API client, which solicits 201 
responses from the server when submitting a blog post.

  File "/usr/local/lib/python2.3/", line 129, in urlopen
    return, data)
  File "/usr/local/lib/python2.3/", line 326, in open
    '_open', req)
  File "/usr/local/lib/python2.3/", line 306, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python2.3/", line 901, in http_open
    return self.do_open(httplib.HTTP, req)
  File "/usr/local/lib/python2.3/", line 895, in do_open
    return self.parent.error('http', req, fp, code, msg, hdrs)
  File "/usr/local/lib/python2.3/", line 352, in error
    return self._call_chain(*args)
  File "/usr/local/lib/python2.3/", line 306, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python2.3/", line 412, in 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 201: Created
msg21179 - (view) Author: John J Lee (jjlee) Date: 2005-05-19 20:05
Logged In: YES 

Before bug 912845 (CVS rev 1.69) added 206 to the list of
response codes considered "successful" by urllib2, I'd
assumed this would never be altered, for
backwards-compatibility reasons.

Note that this behaviour can be configured by module users,
since HTTPError exceptions support the urllib2 response
interface.  This can be done by replacing
HTTPErrorProcessor, or by replacing HTTPDefaultErrorHandler,
or catching the exception "manually".

But maybe since the 206 issue was considered a valid bug
fix, this is OK too.

If so, it would be best if the other 20x responses were also
considered at the same time. 
msg21180 - (view) Author: John Belmonte (jbelmonte) * Date: 2007-03-11 21:23
Fixing this issue is not "maybe OK", it's the correct thing to do.   Having an HTTP success response raise an exception is faulty behavior, and urllib2 users should not have to do silly things to work around it.  It really seems like the authors of urllib2 only understood about 10% of the HTTP protocol.
msg21181 - (view) Author: John J Lee (jjlee) Date: 2007-03-12 00:11
Whether 206 and 201 are HTTP success responses is not the question at hand.  Given that the 206 behaviour was changed, I agree that other success responses should also be considered (certainly seems a mistake that e.g. 203 was not added at the same time as 206), and indeed nobody has done that.  But I think backwards compatibility, the semantics of the various response codes and of urllib2, and ease of understanding, are more important than you seem to assume.

I don't see a patch.  In what way exactly do you propose urllib2 should be changed?  Note that it's not completely obvious: e.g. a 201 received by a plain-urllib2 client would be an erroneous server response, because urllib2 is designed only for retrieving URLs, and is not intended to be a generic HTTP client.  Also note that clients based on urllib2 that do support PUT, such as the Atom client you refer to, can easily implement the modified 201 handling themselves.  So on the face of it, the particular issue you raise is a bug in that code, and not in urllib2.

Of course, your derogatory remarks about authors / bug-fixers won't persuade anybody of anything, or get any work done.
msg21182 - (view) Author: John J Lee (jjlee) Date: 2007-07-12 00:15
Duplicate of 912845, please close.
msg56010 - (view) Author: Jim Jewett (jimjjewett) Date: 2007-09-18 20:25
(Attempting to) close; superceded by
Date User Action Args
2007-09-19 06:20:44georg.brandlsetstatus: open -> closed
resolution: duplicate
superseder: urllib* 20x responses not OK?
2007-09-18 20:25:44jimjjewettsetnosy: + jimjjewett
type: behavior
messages: + msg56010
2004-06-13 04:00:55edwcreate