65

我查看了请求文档,但似乎找不到任何东西。我如何只请求标头,以便评估文件大小?

4

3 回答 3

96

发送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 请求并关闭连接而不是下载正文。其他时候,服务器从不指定文件的总大小。

于 2013-01-11T02:32:49.517 回答
63

采用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
于 2017-06-01T06:21:39.270 回答
-1

获取文件大小 -->

file.headers.get('Content-Length')
于 2020-10-13T08:51:52.230 回答