Add content-type header to ftp URLs (SF patch #454553)

Modify rfc822.formatdate() to always generate English names,
regardless of locale.  This is required by RFC 1123.

In open_local_file() of urllib and urllib2, use new formatdate() from
rfc822.
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index c2249f3..e69c4cb 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -953,11 +953,21 @@
     """Returns time format preferred for Internet standards.
 
     Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
+
+    According to RFC 1123, day and month names must always be in
+    English.  If not for that, this code could use strftime().  It
+    can't because strftime() honors the locale and could generated
+    non-English names.
     """
     if timeval is None:
         timeval = time.time()
-    return "%s" % time.strftime('%a, %d %b %Y %H:%M:%S GMT',
-                                time.gmtime(timeval))
+    timeval = time.gmtime(timeval)
+    return "%s, %02d %s %04d %02d:%02d:%02d GMT" % (
+            ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][timeval[6]],
+            timeval[2],
+            ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
+             "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][timeval[1]-1],
+				timeval[0], timeval[3], timeval[4], timeval[5])
 
 
 # When used as script, run a small test program.
diff --git a/Lib/urllib.py b/Lib/urllib.py
index a255956..8c1852e 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -406,18 +406,12 @@
 
     def open_local_file(self, url):
         """Use local file."""
-        import mimetypes, mimetools, StringIO
+        import mimetypes, mimetools, rfc822, StringIO
         host, file = splithost(url)
         localname = url2pathname(file)
         stats = os.stat(localname)
         size = stats[stat.ST_SIZE]
-        modified = time.gmtime(stats[stat.ST_MTIME])
-        modified = "%s, %02d %s %04d %02d:%02d:%02d GMT" % (
-            ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][modified[6]],
-            modified[2],
-            ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
-             "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][modified[1]-1],
-            modified[0], modified[3], modified[4], modified[5])
+        modified = rfc822.formatdate(stats[stat.ST_MTIME])
         mtype = mimetypes.guess_type(url)[0]
         headers = mimetools.Message(StringIO.StringIO(
             'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' %
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 5882de6..beb9fa5 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -96,9 +96,12 @@
 import md5
 import mimetypes
 import mimetools
+import rfc822
 import ftplib
 import sys
 import time
+import os
+import stat
 import gopherlib
 import posixpath
 
@@ -914,16 +917,22 @@
 
     # not entirely sure what the rules are here
     def open_local_file(self, req):
-        mtype = mimetypes.guess_type(req.get_selector())[0]
-        headers = mimetools.Message(StringIO('Content-Type: %s\n' \
-                                             % (mtype or 'text/plain')))
         host = req.get_host()
         file = req.get_selector()
+        localfile = url2pathname(file)
+        stats = os.stat(localfile)
+        size = stats[stat.ST_SIZE]
+        modified = rfc822.formatdate(stats[stat.ST_MTIME])
+        mtype = mimetypes.guess_type(file)[0]
+        stats = os.stat(localfile)
+        headers = mimetools.Message(StringIO(
+            'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' %
+            (mtype or 'text/plain', size, modified)))
         if host:
             host, port = splitport(host)
         if not host or \
            (not port and socket.gethostbyname(host) in self.get_names()):
-            return addinfourl(open(url2pathname(file), 'rb'),
+            return addinfourl(open(localfile, 'rb'),
                               headers, 'file:'+file)
         raise URLError('file not on local host')