假设我有一个视频文件:
http://mydomain.com/thevideofile.mp4
如何获取此文件的标头和内容类型?用Python。但是,我不想下载整个文件。 我希望它回归:
video/mp4
编辑:这就是我所做的。你觉得怎么样?
f = urllib2.urlopen(url)
params['mime'] = f.headers['content-type']
答案 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
实际下载文件时只会“占用带宽”,即数据包是从套接字发送的。