如何在Python 2中发送HEAD HTTP请求?
我想做的是获取一个特定网址的头信息,这样我就能判断它的MIME类型。比如,我想知道 http://somedomain/foo/
是返回一个HTML文档还是一个JPEG图片。因此,我需要弄清楚怎么发送一个HEAD请求,这样我就可以在不下载内容的情况下读取MIME类型。有没有人知道简单的方法可以做到这一点?
11 个回答
76
这里是必不可少的 Requests
使用方法:
import requests
resp = requests.head("http://www.google.com")
print resp.status_code, resp.text, resp.headers
109
urllib2 可以用来发送一个 HEAD 请求。这比使用 httplib 更方便,因为 urllib2 会帮你解析网址,而不需要你自己把网址分成主机名和路径。
>>> import urllib2
>>> class HeadRequest(urllib2.Request):
... def get_method(self):
... return "HEAD"
...
>>> response = urllib2.urlopen(HeadRequest("http://google.com/index.html"))
你可以通过 response.info() 来获取请求的头信息,和之前一样。有趣的是,你还可以找到你被重定向到的那个网址:
>>> print response.geturl()
http://www.google.com.au/index.html
105
编辑: 这个答案是有效的,但现在你应该使用下面其他答案提到的 requests 库。
可以使用 httplib。
>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> print res.getheaders()
[('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')]
还有一个 getheader(name)
方法可以用来获取特定的头信息。