我查看了请求文档,但似乎找不到任何东西。我如何只请求标头,以便评估文件大小?
问问题
55636 次
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
get
更灵活,如果您想在检查长度后下载响应正文,您可以从简单地访问content
属性开始,或者使用iterator
将分块下载内容的- “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 回答