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: Add Error Code Dictionary to urllib2
Type: enhancement Stage:
Components: Library (Lib) Versions:
process
Status: closed Resolution: accepted
Dependencies: Superseder:
Assigned To: georg.brandl Nosy List: georg.brandl, georg.brandl, michael.foord, rhettinger
Priority: normal Keywords:

Created on 2005-06-08 09:45 by michael.foord, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (4)
msg54566 - (view) Author: Michael Foord (michael.foord) * (Python committer) Date: 2005-06-08 09:45
In order to properly handle 'HTTPError's from 
urllib2.urlopen you need to map error codes to an error 
message.

I suggest the addition of the following dictionary to do 
that  :

    # Table mapping response codes to messages; 
entries have the
    # form {code: (shortmessage, longmessage)}.
    httpresponses = {
        100: ('Continue', 'Request received, please 
continue'),
        101: ('Switching Protocols',
              'Switching to new protocol; obey Upgrade 
header'),

        200: ('OK', 'Request fulfilled, document follows'),
        201: ('Created', 'Document created, URL follows'),
        202: ('Accepted',
              'Request accepted, processing continues off-
line'),
        203: ('Non-Authoritative Information', 'Request 
fulfilled from cache'),
        204: ('No response', 'Request fulfilled, nothing 
follows'),
        205: ('Reset Content', 'Clear input form for further 
input.'),
        206: ('Partial Content', 'Partial content follows.'),

        300: ('Multiple Choices',
              'Object has several resources -- see URI list'),
        301: ('Moved Permanently', 'Object moved 
permanently -- see URI list'),
        302: ('Found', 'Object moved temporarily -- see URI 
list'),
        303: ('See Other', 'Object moved -- see Method 
and URL list'),
        304: ('Not modified',
              'Document has not changed since given time'),
        305: ('Use Proxy',
              'You must use proxy specified in Location to 
access this '
              'resource.'),
        307: ('Temporary Redirect',
              'Object moved temporarily -- see URI list'),

        400: ('Bad request',
              'Bad request syntax or unsupported method'),
        401: ('Unauthorized',
              'No permission -- see authorization schemes'),
        402: ('Payment required',
              'No payment -- see charging schemes'),
        403: ('Forbidden',
              'Request forbidden -- authorization will not 
help'),
        404: ('Not Found', 'Nothing matches the given URI'),
        405: ('Method Not Allowed',
              'Specified method is invalid for this server.'),
        406: ('Not Acceptable', 'URI not available in 
preferred format.'),
        407: ('Proxy Authentication Required', 'You must 
authenticate with '
              'this proxy before proceeding.'),
        408: ('Request Time-out', 'Request timed out; try 
again later.'),
        409: ('Conflict', 'Request conflict.'),
        410: ('Gone',
              'URI no longer exists and has been 
permanently removed.'),
        411: ('Length Required', 'Client must specify 
Content-Length.'),
        412: ('Precondition Failed', 'Precondition in 
headers is false.'),
        413: ('Request Entity Too Large', 'Entity is too 
large.'),
        414: ('Request-URI Too Long', 'URI is too long.'),
        415: ('Unsupported Media Type', 'Entity body in 
unsupported format.'),
        416: ('Requested Range Not Satisfiable',
              'Cannot satisfy request range.'),
        417: ('Expectation Failed',
              'Expect condition could not be satisfied.'),

        500: ('Internal error', 'Server got itself in trouble'),
        501: ('Not Implemented',
              'Server does not support this operation'),
        502: ('Bad Gateway', 'Invalid responses from 
another server/proxy.'),
        503: ('Service temporarily overloaded',
              'The server cannot process the request due to 
a high load'),
        504: ('Gateway timeout',
              'The gateway server did not receive a timely 
response'),
        505: ('HTTP Version not supported', 'Cannot fulfill 
request.'),
        }
msg54567 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2005-06-08 16:38
Logged In: YES 
user_id=1188172

+1. This would simplify delivering messages to users.
msg54568 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2005-07-13 22:24
Logged In: YES 
user_id=80475

Reinfeld, you are welcome to put this in.

Pay attention to the little details.  Look-up the http
protocol spec and use the exact spelling and exact
upper/lower letter case.  

Only include the second field of the tuple if it is
standard.  I quickly looked at a couple of different sources
and found that the "meaning" field was worded diffferently.
 If there is not a standard word-for-word official
definition, then leave that part out and just have a simple
mapping:  {500: "Internal Error", 501: "Not Implemented, ...}.
msg54569 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2005-07-14 06:41
Logged In: YES 
user_id=1188172

Okay. Checked in (without the second field) as
* Lib/urllib2.py r1.83
* Lib/test/test_urllib2.py r1.20
* Doc/lib/liburllib2.tex r1.23
* Misc/NEWS r1.1314
History
Date User Action Args
2022-04-11 14:56:11adminsetgithub: 42064
2005-06-08 09:45:27mjfoordcreate