web-dev-qa-db-ja.com

ヘッダーのみを取得しながら、python-requestsを使用してファイルサイズを取得する

リクエストのドキュメントを確認しましたが、何も見つからないようです。ヘッダーのみをリクエストして、ファイルサイズを評価するにはどうすればよいですか?

40
scandinavian_

HEADリクエスト を送信します:

>>> 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リクエストを送信し、本文をダウンロードする代わりに接続を閉じる必要がありますが、サーバーがファイルの合計サイズを指定しない場合もあります。

67
Blender

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

stream=Trueは、関数が戻るとき、応答ヘッダーのみがダウンロードされ、応答本体はダウンロードされないことを意味します。

どちらも requests.getおよびrequest.headはヘッダーを取得できますが、getを使用する利点があります

  1. getはより柔軟です。長さを調べた後に応答本文をダウンロードする場合は、contentプロパティにアクセスするか、ダウンロードするiteratorを使用して開始できますチャンクのコンテンツ
  2. 「HEADリクエストは、GETリクエストへの応答で送信される情報と同一である必要があります。」が、常にそうとは限りません。

ここに MITオープンコースビデオ の長さを取得する例があります

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
26
watashiSHUN