RFE [ 1216944 ] Add Error Code Dictionary to urllib2
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index c68d244..1c0b7da 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -40,6 +40,10 @@
 
         buf = f.read()
         f.close()
+        
+    def test_statudict(self):
+        # test the new-in-2.5 httpresponses dictionary
+        self.assertEquals(urllib2.httpresponses[404], "Not Found")
 
 
 class MockOpener:
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 13c1f1e..7202507 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -1293,3 +1293,52 @@
             if inspect.isclass(ph):
                 ph = ph()
             opener.add_handler(ph)
+
+# Mapping status codes to official W3C names
+httpresponses = {
+    100: 'Continue',
+    101: 'Switching Protocols',
+    
+    200: 'OK',
+    201: 'Created',
+    202: 'Accepted',
+    203: 'Non-Authoritative Information',
+    204: 'No Content',
+    205: 'Reset Content',
+    206: 'Partial Content',
+    
+    300: 'Multiple Choices',
+    301: 'Moved Permanently',
+    302: 'Found',
+    303: 'See Other',
+    304: 'Not Modified',
+    305: 'Use Proxy',
+    306: '(Unused)',
+    307: 'Temporary Redirect',
+    
+    400: 'Bad Request',
+    401: 'Unauthorized',
+    402: 'Payment Required',
+    403: 'Forbidden',
+    404: 'Not Found',
+    405: 'Method Not Allowed',
+    406: 'Not Acceptable',
+    407: 'Proxy Authentication Required',
+    408: 'Request Timeout',
+    409: 'Conflict',
+    410: 'Gone',
+    411: 'Length Required',
+    412: 'Precondition Failed',
+    413: 'Request Entity Too Large',
+    414: 'Request-URI Too Long',
+    415: 'Unsupported Media Type',
+    416: 'Requested Range Not Satisfiable',
+    417: 'Expectation Failed',
+    
+    500: 'Internal Server Error',
+    501: 'Not Implemented',
+    502: 'Bad Gateway',
+    503: 'Service Unavailable',
+    504: 'Gateway Timeout',
+    505: 'HTTP Version Not Supported',
+}