2013-01-11 120 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