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

ノートの長さの取得の一例である - 時々応答は'転送エンコードを使用して生成されます。チャンクされています。この場合、実際に応答を得ない限り、応答がどれくらい長く続くかを知る方法はありません。 –

+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要求に応じて送信される情報と同じである必要があります。しかし、必ずしもそうではありません。ここで

はないすべての応答は、必ずしも `コンテンツlength`含む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 
関連する問題