16

我需要获取 Internet(Intranet)资源的内容类型,而不是本地文件。如何从 URL 后面的资源中获取 MIME 类型:

我试过这个:

res = urllib.urlopen("http://www.iana.org/assignments/language-subtag-registry")
http_message = res.info()
message = http_message.getplist()

我得到: ['charset=UTF-8']

我怎样才能得到Content-Type, 可以使用urllib以及如何或如果不是其他方式是什么?

4

3 回答 3

27

对此的 Python3 解决方案:

import urllib.request
with urllib.request.urlopen('http://www.google.com') as response:
    info = response.info()
    print(info.get_content_type())      # -> text/html
    print(info.get_content_maintype())  # -> text
    print(info.get_content_subtype())   # -> html
于 2016-04-27T07:07:42.313 回答
20
res = urllib.urlopen("http://www.iana.org/assignments/language-subtag-registry" )
http_message = res.info()
full = http_message.type # 'text/plain'
main = http_message.maintype # 'text'
于 2012-09-18T10:03:29.567 回答
0

更新:由于 info() 函数在 Python 3.9 中已弃用,您可以在此处阅读有关称为 headers 的首选类型

import urllib

r = urllib.request.urlopen(url)
header = r.headers                              # type is email.message.EmailMessage
contentType = header.get_content_type()         # or header.get('content-type')
contentLength = header.get('content-length')
filename = header.get_filename()

此外,一种无需实际加载 url 即可快速获取 mimetype 的好方法

import mimetypes
contentType, encoding = mimetypes.guess_type(url)

第二种方法不能保证答案,但它是一种快速而肮脏的技巧,因为它只是查看 URL 字符串而不是实际打开 URL。

于 2022-02-23T14:57:09.097 回答