所以,当我试图了解requests
模块时,我感到有些惊讶。
>>> furl = 'http://www.downvids.net/downloads/07275feaf477cc0f5a7a67cba965594d5c83/'
>>> resp = requests.get(furl, headers={'Accept-Encoding': 'identity'})
>>> resp.headers['content-length']
'7254371'
>>> resp2 = requests.head(furl)
>>> resp2.headers['content-length']
'20'
但是我认为是requests.get
,它正在将整个文件下载到缓冲区,从中获取内容长度!!
所以,如果是URL重定向的话,正确的内容长度应该是正确的方法,这似乎是因为我尝试了resp2.status_code
而使我302
[执行HEAD
请求时,默认情况下,requests
将allow_redirects
设置为False;这与所有其他HTTP方法不同,默认情况下,其他所有HTTP方法的重定向遵循是[on]。请参阅Redirection and History文档:默认情况下,请求将对除HEAD以外的所有动词执行位置重定向。
您可以通过设置allow_redirects=True
来强制其遵循重定向:
resp2 = requests.head(furl, allow_redirects=True)
您的GET确实遵循了重定向(从原始URL到这里也意味着如果实现成本太高或出于任何其他原因,服务器可能会忽略该要求。您始终可以通过设置https://scontent-b-ams.xx.fbcdn.net/hvideo-xpa1/v/t42.1790-2/1598692_10153946120225652_1024334852_n.mp4?oh=de27dad30979955f4e8fef28b85f9af9&oe=53D50345
);您的HEAD
请求没有。HEAD的服务器SHOULD return the same headers就像GET一样,但是RFC动词
SHOULD
stream=True
来发出不下载正文的GET请求: resp = requests.get(furl, stream=True)