Как получить тип содержимого файла в Python? (с URL) - PullRequest
6 голосов
/ 27 января 2010

Предположим, у меня есть видеофайл:

http://mydomain.com/thevideofile.mp4

Как получить заголовок и тип содержимого этого файла?С питоном.Но я не хочу скачивать весь файл.я хочу, чтобы он вернулся:

video/mp4

Редактировать: это то, что я сделал.Что ты думаешь?

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

Ответы [ 3 ]

12 голосов
/ 27 января 2010

Вроде так:

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

Он загружает и печатает заголовки только потому, что делает запрос HEAD :

Запрашивает ответ, идентичный тому, который соответствует GET запрос, но без ответа тело. Это полезно для получения метаинформация написана в ответ заголовки, без необходимости транспортировки весь контент.

(через Википедию )

4 голосов
/ 27 января 2010

Это ответ более высокого уровня, чем ответ Брайана. Использование механизма 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
0 голосов
/ 27 января 2010

Вы можете получить тип видео, используя метод info () или dict заголовков

f=urllib2.urlopen(url)
print f.headers['Content-Type']
print f.info()

Тестовый прогон со случайно выбранным файлом avi, который гуглил в сети более 600Мб

$ 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

он будет «занимать полосу пропускания» только тогда, когда файл действительно загружен, т.е. пакеты отправляются в и из сокета.

...