如何在Python中获取文件的内容类型? (用网址...)

时间:2010-01-27 00:09:00

标签: python http url content-type

假设我有一个视频文件:

http://mydomain.com/thevideofile.mp4

如何获取此文件的标头和内容类型?用Python。但是,我不想下载整个文件。 我希望它回归:

video/mp4

编辑:这就是我所做的。你觉得怎么样?

f = urllib2.urlopen(url)
    params['mime'] =  f.headers['content-type']

3 个答案:

答案 0 :(得分:12)

像这样:

>>> import httplib
>>> conn = httplib.HTTPConnection("mydomain.com")
>>> conn.request("HEAD", "/thevideofile.mp4")
>>> res = conn.getresponse()
>>> print res.getheaders()

这只会下载并打印标题,因为它正在发出HEAD请求:

  

要求响应与对应于GET的响应相同   请求,但没有回复   身体。这对于检索很有用   回应中写的元信息   标题,无需运输   整个内容。

(通过Wikipedia

答案 1 :(得分:4)

这是一个比Brian更高级的答案。使用urllib机器具有通常的优点,例如自动处理重定向等等。

import urllib2

class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

url = "http://mydomain.com/thevideofile.mp4"
head = urllib2.urlopen(HeadRequest(url))
head.read()          # This will return empty string and closes the connection
print head.headers.maintype
print head.headers.subtype
print head.headers.type

答案 2 :(得分:0)

您可以使用info()方法或标题dict

获取视频类型
f=urllib2.urlopen(url)
print f.headers['Content-Type']
print f.info()

在网上搜索随机选择的avi文件的测试运行超过600Mb

$ cat test.py
#!/usr/bin/env python
import urllib2
url="http://www.merseypirates.com/rjnsteve/rjnsteve/oem16.avi"
f=urllib2.urlopen(url)
print f.headers['Content-Type']

$ time python test.py
video/x-msvideo

real    0m4.931s
user    0m0.115s
sys     0m0.042s

实际下载文件时只会“占用带宽”,即数据包是从套接字发送的。