使用python-requests获取文件大小,同时只获取标题

时间:2013-01-11 02:27:19

标签: python python-requests

我查看了请求文档,但我似乎无法找到任何内容。我如何只请求标题,以便我可以评估文件大小?

3 个答案:

答案 0 :(得分:64)

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

答案 1 :(得分:20)

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

stream=True表示函数返回时,仅下载响应标头,响应正文

requests.getrequest.head都可以为您提供标题,但使用get

的优点是
  1. get更灵活,如果您想在检查长度后下载响应正文,只需访问content属性或使用iterator下载即可内容分块
  2. " HEAD请求应该与响应GET请求时发送的信息相同。" 但并非总是如此。
  3. 这是获取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
    

答案 2 :(得分:-1)

获取文件大小->

request.FILES.get("uploadedFile").size

在这里,
“ uploadedFile”是来自请求的文件名