2013-01-11 72 views

回答

54

HEAD request

>>> import requests 
>>> response = requests.head('http://example.com') 
>>> response.headers 
    {'connection': 'close', 
'content-encoding': 'gzip', 
'content-length': '606', 
'content-type': 'text/html; charset=UTF-8', 
'date': 'Fri, 11 Jan 2013 02:32:34 GMT', 
'last-modified': 'Fri, 04 Jan 2013 01:17:22 GMT', 
'server': 'Apache/2.2.3 (CentOS)', 
'vary': 'Accept-Encoding'} 

HEAD请求就像一个GET请求仅下载头。请注意,服务器要实际遵守HEAD请求。有些服务器只会响应GET请求,因此您必须发送GET请求并关闭连接而不是下载正文。其他时候,服务器从不指定文件的总大小。

+16

音符的长度,并非每一个响应将必须包括一个'内容length'的一个例子 - 有时被使用'传送编码生成的响应:在这种情况下,除非您真正获得整个响应,否则无法知道响应会持续多久。 –

+2

这与使用urllib.urlopen(url).info()['content-length']'检索的大小不同,所以不完全是我想要的。 –

11

使用requests.get(url, stream=True).headers['Content-length']

stream=True意味着,当函数返回时,仅响应标头被下载,响应身体不

两个requests.getrequest.head可以让你的信息,但是有使用get

  1. get更加灵活,如果你想检查长度后下载响应的身体,你可以通过简单的访问开始的一个优点content属性或使用iterator将下载以块的内容
  2. “HEAD请求应与响应于GET请求发送的信息”。但并非总是如此。

这里是得到一个MIT open course video

MitOpenCourseUrl = "http://www.archive.org/download/MIT6.006F11/MIT6_006F11_lec01_300k.mp4" 
resHead = requests.head(MitOpenCourseUrl) 
resGet = requests.get(MitOpenCourseUrl,stream=True) 
resHead.headers['Content-length'] # output 169 
resGet.headers['Content-length'] # output 121291539