mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
SF patch #454553 by Walter Dörwald: auto-guess content-type header for
ftp urls.
This commit is contained in:
parent
be92af0e2a
commit
88e0b5bee0
2 changed files with 9 additions and 6 deletions
|
@ -43,7 +43,8 @@ returned by the server at the head of the retrieved HTML page
|
||||||
(including Content-Length and Content-Type). When the method is FTP,
|
(including Content-Length and Content-Type). When the method is FTP,
|
||||||
a Content-Length header will be present if (as is now usual) the
|
a Content-Length header will be present if (as is now usual) the
|
||||||
server passed back a file length in response to the FTP retrieval
|
server passed back a file length in response to the FTP retrieval
|
||||||
request. When the method is local-file, returned headers will include
|
request. A Content-Type header will be present if the MIME type can
|
||||||
|
be guessed. When the method is local-file, returned headers will include
|
||||||
a Date representing the file's last-modified time, a Content-Length
|
a Date representing the file's last-modified time, a Content-Length
|
||||||
giving file size, and a Content-Type containing a guess at the file's
|
giving file size, and a Content-Type containing a guess at the file's
|
||||||
type. See also the description of the
|
type. See also the description of the
|
||||||
|
|
|
@ -440,6 +440,7 @@ class URLopener:
|
||||||
|
|
||||||
def open_ftp(self, url):
|
def open_ftp(self, url):
|
||||||
"""Use FTP protocol."""
|
"""Use FTP protocol."""
|
||||||
|
import mimetypes, mimetools, StringIO
|
||||||
host, path = splithost(url)
|
host, path = splithost(url)
|
||||||
if not host: raise IOError, ('ftp error', 'no host given')
|
if not host: raise IOError, ('ftp error', 'no host given')
|
||||||
host, port = splitport(host)
|
host, port = splitport(host)
|
||||||
|
@ -482,12 +483,13 @@ class URLopener:
|
||||||
value in ('a', 'A', 'i', 'I', 'd', 'D'):
|
value in ('a', 'A', 'i', 'I', 'd', 'D'):
|
||||||
type = value.upper()
|
type = value.upper()
|
||||||
(fp, retrlen) = self.ftpcache[key].retrfile(file, type)
|
(fp, retrlen) = self.ftpcache[key].retrfile(file, type)
|
||||||
|
mtype = mimetypes.guess_type("ftp:" + url)[0]
|
||||||
|
headers = ""
|
||||||
|
if mtype:
|
||||||
|
headers += "Content-Type: %s\n" % mtype
|
||||||
if retrlen is not None and retrlen >= 0:
|
if retrlen is not None and retrlen >= 0:
|
||||||
import mimetools, StringIO
|
headers += "Content-Length: %d\n" % retrlen
|
||||||
headers = mimetools.Message(StringIO.StringIO(
|
headers = mimetools.Message(StringIO.StringIO(headers))
|
||||||
'Content-Length: %d\n' % retrlen))
|
|
||||||
else:
|
|
||||||
headers = noheaders()
|
|
||||||
return addinfourl(fp, headers, "ftp:" + url)
|
return addinfourl(fp, headers, "ftp:" + url)
|
||||||
except ftperrors(), msg:
|
except ftperrors(), msg:
|
||||||
raise IOError, ('ftp error', msg), sys.exc_info()[2]
|
raise IOError, ('ftp error', msg), sys.exc_info()[2]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue